
Spring Boot 的优点
- 快速启动:Spring Boot 提供了简洁的配置和开箱即用的功能,减少了项目启动时所需的配置工作,开发者可以专注于业务逻辑。
- 简化的配置管理:Spring Boot 的自动配置机制大大减少了开发者手动配置的繁琐工作,尤其是在集成数据库、消息队列、安全性等复杂组件时,开发者可以通过少量配置完成集成。
- 内置 Web 服务器:Spring Boot 内置了常用的 Web 服务器,使得开发者可以直接运行 Web 应用,而无需部署到外部服务器。
- 强大的生态系统:Spring Boot 集成了 Spring 全家桶,提供了与 Spring 生态中各个组件的无缝集成,并通过各种 Starter 来快速添加第三方库支持。
1. 依赖管理对比
传统Spring (pom.xml):
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.12.Final</version>
</dependency>
<!-- 更多依赖... -->
</dependencies>
Spring Boot (pom.xml):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
版本集中管理:
- 传统
Spring需要为每个依赖指定版本号 Spring Boot通过starter-parent统一管理所有依赖版本,避免版本冲突
依赖组合优化:- 传统Spring需要分别添加多个相关依赖
- Spring Boot通过starter机制将相关依赖打包在一起(例如:
spring-boot-starter-web包含了spring-webmvc、jackson、tomcat等)
具体案例对比
- 构建一个Web 项目
传统的Spring 需要
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
</dependencies>
而 Springboot 只需要
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. Web配置对比
传统Spring (web.xml):
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Spring Boot:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3. 数据库配置对比
传统Spring (applicationContext.xml):
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_name"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.example.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
Spring Boot (application.properties):
spring.datasource.url=jdbc:mysql://localhost:3306/db_name
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
4. MyBatis配置对比
传统Spring (mybatis-config.xml):
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_name"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
Spring Boot:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(Long id);
}
application.properties:
mybatis.type-aliases-package=com.example.model
mybatis.mapper-locations=classpath:mapper/*.xml
5. Controller配置对比
传统Spring:
@Controller
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
}
Spring Boot:
@RestController
public class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUser(id);
}
}
6.部署流程对比:
- 传统Spring应用部署方式:
<!-- 需要打包成war文件 -->
<packaging>war</packaging>
<!-- 需要添加servlet容器依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope> <!-- provided表示由外部容器提供 -->
</dependency>
传统Spring:
- 打包成WAR文件
- 将WAR复制到Tomcat的webapps目录
- 启动Tomcat服务器
- Tomcat加载并部署WAR文件
Spring Boot:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// 直接运行,内嵌服务器会自动启动
}
}
上述代码示例清楚地展示了Spring Boot如何通过自动配置和约定优于配置的原则,大大简化了传统Spring应用的配置过程。Spring Boot不仅减少了配置文件的数量,还提供了更简洁的编程模型。
9974

被折叠的 条评论
为什么被折叠?



