声明:采用deepseek整理,个人备忘
Spring Boot 通过"约定优于配置"的原则,极大地简化了传统 Spring MVC 项目的配置方式。以下是 Spring Boot 如何处理传统配置文件(web.xml
, applicationContext.xml
, dispatcher-servlet.xml
)的:
1. 完全摒弃 web.xml
Spring Boot 不再使用 web.xml
,而是通过以下方式替代:
-
嵌入式 Servlet 容器:默认使用 Tomcat/Jetty/Undertow,自动配置
-
Servlet 注册:使用
@ServletComponentScan
或编程式注册 -
Filter/Listener 注册:通过
@Bean
方式或自动配置 -
DispatcherServlet 自动配置:
DispatcherServletAutoConfiguration
2. 合并 applicationContext 和 dispatcher-servlet
Spring Boot 使用统一的应用上下文,不再区分根上下文和子上下文:
-
单一应用上下文:
SpringApplication
创建的唯一上下文 -
自动配置:通过
@EnableAutoConfiguration
自动配置所有组件 -
配置方式:使用
@Configuration
类替代 XML 配置
3. 关键自动配置类
Spring Boot 通过以下自动配置类处理 Web 相关配置:
-
WebMvcAutoConfiguration:
-
自动配置
DispatcherServlet
-
默认视图解析器、静态资源处理
-
消息转换器、拦截器等
-
-
ServletWebServerFactoryAutoConfiguration:
-
嵌入式 Servlet 容器配置
-
端口、上下文路径等设置
-
-
ErrorMvcAutoConfiguration:
-
错误处理配置
-
默认错误页面
-
4. 现代配置方式示例
替代 applicationContext.xml
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/mydb")
.username("root")
.password("password")
.build();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
替代 dispatcher-servlet.xml
@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("/static/");
}
}
5. 完全零配置的 Spring Boot Web 应用
Spring Boot 甚至可以不需要任何显式配置:
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello World";
}
}
6. 配置属性化
所有配置都可以通过 application.properties
或 application.yml
管理:
# 服务器配置
server.port=8080
server.servlet.context-path=/myapp
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
# MVC 配置
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
总结对比
传统 Spring MVC | Spring Boot 方式 |
---|---|
web.xml | 自动配置,嵌入式容器 |
applicationContext.xml | @Configuration + @Bean |
dispatcher-servlet.xml | WebMvcConfigurer + 自动配置 |
手动组件扫描 | @ComponentScan 自动生效 |
显式视图解析器配置 | spring.mvc.view.* 属性配置 |
手动事务管理配置 | @EnableTransactionManagement |
Spring Boot 通过自动配置和约定大于配置的原则,让开发者只需关注业务代码,而无需处理繁琐的 XML 配置。