原文网址:SpringBoot原理--自动配置_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍SpringBoot是如何实现自动配置的。
问题的引出
SpringBoot有如下功能:
- 创建好的SpringBoot项目(假如启动类是DemoApplication),可以直接运行
- 可以在配置文件自定义配置
- 在启动类上加个注解就可以使用某个功能
那么,SpringBoot是如何实现这些功能的呢?
入口
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...
}
- @SpringBootConfiguration // 对@Configuration 注解的封装,与@Configuration 作用相同。
- @Configuration // 通过javaConfig的方式来添加组件到 IoC 容器中
- @EnableAutoConfiguration
- @AutoConfigurationPackage // 扫描@ComponentScan指定的路径下的类,添加到IOC
- @Import(AutoConfigurationImportSelector.class) // 将META-INF/spring.factories中定义的bean 添加到 IoC 容器中
- @ComponentScan // 包扫描。
- 默认扫描的包的根路径是 Spring Boot 主程序启动类所在包的位置。
- 在扫描过程中由前面介绍的 @AutoConfigurationPackage 注解进行解析,从而得到 Springboot 项目主程序启动类所在包的具体位置。
@SpringBootConfiguration
简介
对@Configuration 注解的封装,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中。
上边只是部分内容,为便于维护,本文已迁移到此地址:SpringBoot原理-自动配置 - 自学精灵