Springboot自动配置原理
Springboot自动配置原理
条件注解
自动配置类中初始化Bean的方法上,使用@Conditional注解结合一个实现了Condition接口matches方法的类,来决定某个Bean是否进行实例化.一个例子如下:
1 |
|
SomeCondition是实现了Condition接口的实现类,通过调用其matches方法,可以知道某个条件是true还是false.如果返回true,才进行bean的实例化.在SomeCondition中,什么情况返回true可以玩出非常多的花样,比如可以基于应用的某个配置信息是否存在,类路径下是否存在某个类.
Conditional注解除了可以放在@Bean,还可以放在@Component or @Configuration.
配置属性的获取
通过注解@PropertySource从指定路径读取,比如读取applicaiton.properties中的属性,启动参数的属性.
1 |
|
在Spring Boot启动时,会在许多位置获取环境变量,application.properties的属性,启动参数等配置信息.
META-INF/spring.factories
每个Spring Boot项目都依赖org.springframework.boot:spring-boot-autoconfigure这个jar文件,里面的META-INF目录下有个spring.factories文件,里面包含了大量自动配置类的声明.这些自动配置类实际上就是用了大量的@Conditional注解来判断是否某个Bean进行初始化.
高级条件注解
Spring Boot提供的Condition接口过于底层,开发人员可能需要实现这个Condition去完成一些Bean的初始化.为了使开发人员更加方便,Spring Boot提供了一些高级条件注解.比如:
1 |
|
在大多数情况下,Spring Boot提供的注解已经可以让你不需要写Condition接口的实现.
Starter
- SpringBoot在pom文件中依赖了很多的starter,每个starter中又依赖了很多的第三方库,通过这种方式,快速的将第三方库引入,这样才能做到自动配置.
参考资料
https://www.marcobehler.com/guides/spring-boot-autoconfiguration#_autoconfigurations
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!