黑马程序员技术交流社区

标题: 【广州校区】【原创】SpringBoot自动配置的原理 [打印本页]

作者: 帅气de路人甲    时间: 2020-1-2 14:22
标题: 【广州校区】【原创】SpringBoot自动配置的原理
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






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2