博客
关于我
Spring 和 Spring Boot 最核心的 3 大区别,详解!
阅读量:796 次
发布时间:2023-03-22

本文共 5997 字,大约阅读时间需要 19 分钟。

Spring 和 Spring Boot 的区别解析

对于开发人员来说,Spring 和 Spring Boot 都是非常流行的框架,但它们之间的区别却常常让人感到困惑。作为一名刚入门的开发者,我曾经也对这两个框架的不同感到茫然。随着时间的积累,我逐渐理解了它们的区别,并希望能通过这篇文章,与你分享我的理解,希望能为你提供一些新的视角和见解。

Spring 的概述

作为一个成熟的框架,Spring 已经在 Java 开发领域占据了重要的地位。它为开发人员提供了一个强大的工具包,帮助我们构建高效、灵活的 Java 应用程序。Spring 的核心功能包括依赖注入、事务管理、数据访问、模块化配置等,通过这些功能,开发人员可以显著提升开发效率。

Spring 的模块化体系非常完善,例如:

  • Spring JDBC:简化数据库连接管理,提供事务支持。
  • Spring MVC:构建 Web 应用程序的MVC 层。
  • Spring Security:提供安全认证功能。
  • Spring AOP:实现面向切面编程,提升代码可维护性。
  • Spring ORM:与数据库 ORM 框架集成,简化数据操作。

通过这些模块,Spring 大大简化了传统 Java 应用程序的开发流程。

Spring Boot 的概述

Spring Boot 是 Spring 框架的一个扩展,它的目标是简化 Spring 应用的配置和部署,帮助开发人员更高效地构建应用程序。Spring Boot 通过自动配置功能,减少了传统 Spring 应用的繁琐配置需求。

Spring Boot 的主要特点包括:

  • 无需 XML 配置:Spring Boot 提供了丰富的内置配置,通过 YAML 文件或应用程序属性文件来配置应用。
  • 嵌入式容器:Spring Boot 内置了 Tomcat、Jetty 等嵌入式 Web 容器,用户无需手动部署 WAR 文件。
  • 自动配置:Spring Boot 提供了一系列预配置的 Starter 组件,通过简单的依赖声明即可快速搭建完整的应用。
  • 简化部署: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:模板引擎支持。

MVC 配置

在 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
@EnableWebMvc
public 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
@EnableWebSecurity
public 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 中,只需编写一个主类:

@SpringBootApplication
public 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/

你可能感兴趣的文章
Objective-C实现借记款项功能(附完整源码)
查看>>
Objective-C实现关系矩阵A和B的乘积(附完整源码)
查看>>
Objective-C实现内存映射文件(附完整源码)
查看>>
Objective-C实现内存泄露检查(附完整源码)
查看>>
Objective-C实现内格尔·施雷肯伯格算法(附完整源码)
查看>>
Objective-C实现分块查找算法(附完整源码)
查看>>
Objective-C实现分水岭算法(附完整源码)
查看>>
Objective-C实现分解质因数(附完整源码)
查看>>
Objective-C实现切换数字的符号switchSign算法(附完整源码)
查看>>
Objective-C实现列主元高斯消去法(附完整源码)
查看>>
Objective-C实现创建多级目录(附完整源码)
查看>>
Objective-C实现删除重复的字母字符算法(附完整源码)
查看>>
Objective-C实现判断32位的数字是否为正数isPositive算法(附完整源码)
查看>>
Objective-C实现十进制转N进制算法(附完整源码)
查看>>
Objective-C实现十进制转八进制算法(附完整源码)
查看>>
Objective-C实现华氏温度转摄氏温度(附完整源码)
查看>>
Objective-C实现单例模式(附完整源码)
查看>>
Objective-C实现单向链表的反转(附完整源码)
查看>>
Objective-C实现单向链表的反转(附完整源码)
查看>>
Objective-C实现单字母密码算法(附完整源码)
查看>>