SpringBoot自动装配原理

SpringBoot 启动流程

1、@SpringBootApplication注解中引入了@EnableAutoConfiguration注解

2、@EnableAutoConfiguration注解中@Import(AutoConfigurationImportSelector.class)

3、AutoConfigurationImportSelector.Class实现了ImportSelector接口,在实现方法String[]selectImports中

  • 获取加载 META-INF/spring.factories文件中的自动配置信息

  • removeDuplicates(configurations)排除重复的信息

  • 可以在@SpringBootApplication去除自己不想用的(exclude=RedisAutoConfiguration.class)去除的逻辑就是以上图中的这几行代码

    1、Set<String> exclusions = getExclusions(annotationMetadata, attributes);
    2、checkExcludedClasses
    3、configurations.removeAll(exclusions);

如果当前项目很多我们不用的就会被加载到容器中,就很占空间,所以通过configurations = getConfigurationClassFilter().filter(configurations);方法就可以过滤出我们要用到的。

 哪些是我们要用到的呢,通过什么匹配过滤?

autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(classLoader); 方法数据来源META-INF/spring-autoconfigure-metadata.properties所有文件 例如:

  • org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration= org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration.ConditionalOnClass=org.springframework.data.redis.core.RedisOperations需要有RedisOperations这个class才会触发redis的自动配置,然后从自动配置的所有集合过滤后留下来
  • org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration.ConditionalOnBean=org.springframework.data.redis.connection.RedisConnectionFactory 需要容器中有RedisConnectionFactory这个bean才会配置

也可以通过注解实现,例如:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(AuthenticationManager.class)
@ConditionalOnBean(ObjectPostProcessor.class)
@ConditionalOnMissingBean(value = { AuthenticationManager.class, AuthenticationProvider.class, UserDetailsService.class }, type = { "org.springframework.security.oauth2.jwt.JwtDecoder",
"org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector" })
public class UserDetailsServiceAutoConfiguration {
}

三个Condition都要成立才会加载自定义第三方中间件,去整合到spring中的重点

(1)定义好自己工程中的spring.factories文件

(2)也可以通过文件的方式(spring-autoconfigure-metadata.properties)定义我们载入的条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值