springboot自动配置原理:
核心注解: @SpringBootApplication
主要由@Configuration(声明为一个配置类) @EnableAutoConfiguration(启动类的核心注解) @ComponentScan(扫描注解) 三个注解组合;
启动记载EnableAutoConfiguration流程:
EnableAutoConfiguration(启动类的核心注解) >>> 引入一个配置类的selector选择器(返回一堆配置类的全路径名称String[]) >>> 通过判断条件是否满足进行自动配置(Conditional衍生注解).
其中String[] 来自于一个META_INF/spring.factories的文件, 通过注解作为Key值读取数据.
如何实现自定义starter:
在配置类所在的静态资源文件中添加<META_INF/spring.factories文件, 在其中配置要自动配置的配置类. 然后在需要自动配置的项目添加依赖和条件.
例如:org.springframework.boot.autoconfigure.EnableAutoConfiguration作为键,后跟一个或多个自动配置类(带有@Configuration注解)的全限定类名。
@Configuration 声明配置类
@Bean 作用是配合一个配置类, 或者是一个spring 可以加载扫描的类, 例如@Component 使得方法的返回值作为bean对象被容器管理, 效果和一个xml中的bean标签一样
@ComponentScan(basePackages) 实现类注解的扫描 .扫描@Controller @Service @Componet @Autowired @Configuration等.
@import 导入配置类 可以直接导入配置类, 也可以导入选择器
@PropertySource 导入配置文件
@ImportResource 可以用注解 也可以导入配置文件