spring boot自动配置原理

spring boot 在启动时,会加载spring boot autoconfigigure  /META-INF/spring.factories,定义了初始化设置类,将初始化的环境纳入spring 的容器中.如下:


当我们运行XXXApplication的main方法的时候 springApplication.run(xx.class)会首先执行springApplication的初始化方法,

    private void initialize(Object[] sources) {
        if (sources != null && sources.length > 0) {
            this.sources.addAll(Arrays.asList(sources));
        }

        this.webEnvironment = this.deduceWebEnvironment();
        this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
        this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
        this.mainApplicationClass = this.deduceMainApplicationClass();
    }
public abstract class SpringFactoriesLoader {
    private static final Log logger = LogFactory.getLog(SpringFactoriesLoader.class);
    public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
 


 举例:redis

首先是从spring.factories属性是定义redis相关的内容:

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\

org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\

表明单工程开启的时候,首先会找RedisAutoConfiguration.Class 和RedisRepositoriesAutoConfiguration文件 

@Configuration
@ConditionalOnClass({Jedis.class, EnableRedisRepositories.class})
@ConditionalOnProperty(
    prefix = "spring.data.redis.repositories",
    name = {"enabled"},
    havingValue = "true",
    matchIfMissing = true
)
@ConditionalOnMissingBean({RedisRepositoryFactoryBean.class})
@Import({RedisRepositoriesAutoConfigureRegistrar.class})
@AutoConfigureAfter({RedisAutoConfiguration.class})
public class RedisRepositoriesAutoConfiguration {
    public RedisRepositoriesAutoConfiguration() {
    }
}

这个类表明要加载redis的其他文件后参能运行

@conditionalOnClass({a.class , b.class})

Spring容器中是否存在对应的实例。可以通过实例的类型、类名、注解、昵称去容器中查找(可以配置从当前容器中查找或者父容器中查找或者两者一起查找)这些属性都是数组,通过"与"的关系进行查找

个人理解是,表示只有存在a b 类的情况下才会加载本类。


表明在application.properties里的书写规则
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值