SpringBoot源码阅读2-自动配置

发布于:2024-04-26 ⋅ 阅读:(108) ⋅ 点赞:(0)

SpringBoot源码阅读2-自动配置

在传统的Spring应用中,开发者需要手动配置一系列Web应用的核心组件,例如DispatcherServlet用于处理请求分发、ViewResolver用于视图解析、CharacterEncodingFilter用于字符编码过滤等。

然而在SpringBoot中只要引入了spring-boot-starter-web时,SpringBoot会根据约定和条件自动配置这些组件。例如,它会自动注册DispatcherServlet、配置默认的ViewResolver,并添加适当的字符编码过滤器,使得Web应用能够正常工作。

那么问题来了

问题1:SpringBoot是如何进行自动配置的?会进行那些组件的自动配置?

SpringBoot应用程序的入口是主程序,即标注了@SpringBootApplication注解的类就是主程序类,因此一切都要从@SpringBootApplication注解开始。

源码分析:

1、@SpringBootApplication注解

@Target(ElementType.TYPE) // 适用范围 -> TYPE表示可以使用在 类 | 接口 | 注解 | 枚举 中
@Retention(RetentionPolicy.RUNTIME) // 生命周期 -> RUNTIME表示运行时
@Documented // 可以记录在javadoc中
@Inherited // 可以被子类继承该注解
// ---------------------- 核心是下面三个注解
@SpringBootConfiguration // 标注该类为配置类
@EnableAutoConfiguration // 启动自动配置功能
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) // 注解扫描
public @interface SpringBootApplication {
    ...
}

2、@SpringBootConfiguration注解

组合了@Configuration注解,标注当前类是主配置类,我们在主程序类中声明的bean、或者是@RestController起作用,
也是这个注解的功劳。

例如下图在主程序中为什么这几个注解可以生效也是注解@SpringBootConfiguration的功劳。

3、@EnableAutoConfiguration注解

启动自动配置功能核心注解,Spring中有很多以@Enable开头的注解,其作用就是借助@Import来收集并注册特定场景相关的bean,并加载到spring容器中。而 @EnableAutoConfiguration 就是借助 @Import 来收集所有符合自动配置条件的bean定义,并加载到Spring容器。


网站公告

今日签到

点亮在社区的每一天
去签到