Spring Boot的运行是由注解@EnableAutoConfiguration提供的
它的关键功能是@Import注解。
EnableAutoConfigurationImportSelector 使用 SpringFactoriesLoader.loadFactoryNames 方法来扫描具有MEAT-INF/spring.factories文件的jar包
在了解原理前我们需要先认识下面几个注解:
@ConditionalOnBean:当容器里有指定的Bean为true
@ConditionalOnClass:当类路径下有指定的类为true
@ConditionalOnMissingBean:当容器里没有指定的Bean为true
@ConditionalOnProperty:指定的数据是否有指定的值
认识完注解后我们可以按照下面流程去理解Spring Boot的自动配置原理
1、自定义Starter(在自定义Starter之前先要在Maven中填写依赖)
2、完成一个test类,类中定义默认的属性值,如该类中,只有一个属性值age,默认为18。@ConfigurationProperties注解会定义一个匹配,如果想修改属性值,可以在application.properties中使用“匹配.属性=修改的值”进行修改
3、完成一个service服务类。即主要的功能类,如果没有SpringBoot,这些服务类在Spring中都是需要自己去配置生成的。
如SpringMVC中的DispatcherServlet、Mybatis的DataSource等
4、完成一个自动配置类。自动配置类主要作用是SpringBoot的配置核心,它会写在MEAT-INF/spring.factories中,告知SpringBoot在启动时去读取该类并根据该类的规则进行配置。
@EnableConfigurationProperties注解根据TestProperties类开启属性注入,允许在application.properties修改里面的属性值。
@ConditionOnClass会检测是否存在TestService类
@ConditionOnProperty类会查看是否开启该自动配置。默认开启(true)。
@ConditionOnMissingBean会检测容器中是否有TestService类的对象,如果没有则生成一个
5、最后一步,不要忘记在在MEAT-INF文件夹中创建spring.factories文件。内容很简单,告诉SpringBoot去读取TestServiceAutoConfiguration类 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\cn.TestServiceAutoConfiguration
|
|