本文共 5997 字,大约阅读时间需要 19 分钟。
对于开发人员来说,Spring 和 Spring Boot 都是非常流行的框架,但它们之间的区别却常常让人感到困惑。作为一名刚入门的开发者,我曾经也对这两个框架的不同感到茫然。随着时间的积累,我逐渐理解了它们的区别,并希望能通过这篇文章,与你分享我的理解,希望能为你提供一些新的视角和见解。
作为一个成熟的框架,Spring 已经在 Java 开发领域占据了重要的地位。它为开发人员提供了一个强大的工具包,帮助我们构建高效、灵活的 Java 应用程序。Spring 的核心功能包括依赖注入、事务管理、数据访问、模块化配置等,通过这些功能,开发人员可以显著提升开发效率。
Spring 的模块化体系非常完善,例如:
通过这些模块,Spring 大大简化了传统 Java 应用程序的开发流程。
Spring Boot 是 Spring 框架的一个扩展,它的目标是简化 Spring 应用的配置和部署,帮助开发人员更高效地构建应用程序。Spring Boot 通过自动配置功能,减少了传统 Spring 应用的繁琐配置需求。
Spring Boot 的主要特点包括:
在 Spring 的项目中,依赖管理是一个非常重要的环节。为了创建一个基本的 Web 应用程序,开发人员需要添加以下依赖:
org.springframework spring-web 5.1.0.RELEASE org.springframework spring-webmvc 5.1.0.RELEASE
与此同时,Spring Boot 只需要添加一个依赖项即可启动和运行 Web 应用程序:
org.springframework.boot spring-boot-starter-web 2.0.6.RELEASE
Spring Boot 还提供了许多 Starter 组件,例如:
spring-boot-starter-data-jpa:数据库访问支持。spring-boot-starter-security:安全认证功能。spring-boot-starter-test:测试支持。spring-boot-starter-web:Web 应用程序支持。spring-boot-starter-thymeleaf:模板引擎支持。在 Spring 中,创建一个 JSP Web 应用程序需要进行大量的配置,包括定义调度程序(Servlet)、映射规则等。在 Spring Boot 中,这些配置可以通过简单的属性文件来完成。
例如,在 Spring 中,我们需要编写一个 Initializer 类:
public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("com.example"); container.addListener(new ContextLoaderListener(context)); ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); }} 而在 Spring Boot 中,只需在 `application.properties` 文件中添加以下配置:
spring.mvc.view.prefix=/WEB-INF/jsp/spring.mvc.view.suffix=.jsp
在 Spring 中,配置 Thymeleaf 模板引擎需要编写大量的代码,包括创建模板解析器、模板引擎等。在 Spring Boot 中,这些配置可以通过简单的依赖声明和属性配置来完成。
例如,在 Spring 中,我们需要编写一个配置类:
@Configuration@EnableWebMvcpublic class MvcWebConfig implements WebMvcConfigurer { @Autowired private ApplicationContext applicationContext; @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setApplicationContext(applicationContext); templateResolver.setPrefix("/WEB-INF/views/"); templateResolver.setSuffix(".html"); return templateResolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); templateEngine.setEnableSpringELCompiler(true); return templateEngine; } @Override public void configureViewResolvers(ViewResolverRegistry registry) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); registry.viewResolver(resolver); }} 而在 Spring Boot 中,只需添加以下依赖:
org.springframework.boot spring-boot-starter-thymeleaf
在 Spring 中,安全配置需要编写一个扩展 WebSecurityConfigurerAdapter 的类,并在配置类上添加 @EnableWebSecurity 注解。在 Spring Boot 中,这些配置可以通过简单的依赖和属性配置来完成。
例如,在 Spring 中,我们可以编写以下配置类:
@Configuration@EnableWebSecuritypublic class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin") .password(passwordEncoder().encode("password")) .authorities("ROLE_ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest().authenticated() .and().httpBasic(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }} 而在 Spring Boot 中,只需添加以下依赖:
org.springframework.boot spring-boot-starter-security
在 Spring 中,应用程序的启动引导通常依赖于 web.xml 文件或 Servlet 3+ 的 Initializer 类。在 Spring Boot 中,启动引导更加简单和自动化。
在 Spring 中,我们可以编写一个 Initializer 类:
public class ServletInitializer extends ContextLoaderListener { public static void main(String[] args) { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("com.example"); context.addListeners(new ServletInitializer()); ServletRegistration.Dynamic dispatcher = context.createDispatcherServlet(); dispatcher.setLoadOnStartup(true); dispatcher.addMapping("/"); }} 而在 Spring Boot 中,只需编写一个主类:
@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} 在打包和部署方面,Spring 和 Spring Boot 也存在显著的区别。Spring Boot 提供了更加便捷的打包和部署工具,例如通过 Maven 插件快速生成可执行的 JAR 或 WAR 文件。
Spring Boot 还支持在外部容器中部署,例如 Tomcat、Jetty 等容器。通过配置 WAR 文件的 MANIFEST.MF 文件,用户可以指定主类,从而实现无需手动部署的自动启动。
从上述对比可以看出,Spring Boot 实际上是 Spring 框架的一个极大简化和封装。它通过自动配置和内置容器,减少了传统 Spring 应用的配置复杂性,使开发人员能够更加专注于业务逻辑的实现。
当然,Spring Boot 也有一些局限性,例如对定制化配置的要求较高。在实际项目中,开发人员需要根据需求选择合适的配置方式,以充分发挥 Spring 和 Spring Boot 的优势。
转载地址:http://bdqfk.baihongyu.com/