分享:SpringBoot的自动配置

Springboot的自动配置概念

SpringBoot根据我们添加的jar包依赖,会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用@Autowired或者@Resource等注解来使用它。 讨论:检查需要装配哪些配置类,配置类到底能不能装配,就看我们自己依赖的一些核心类,核心属性,有没有,这些都在配置类的源码中有体现。

Springboot的自动配置原理

@SpringBootApplication 这是核心

Spring Boot应用的启动入口是@SpringBootApplication注解标注类中的main()方法, @SpringBootApplication : SpringBoot 应用标注在某个类上说明这个类是 SpringBoot 的主配置类, SpringBoot 就应该运行这个类的 main() 方法启动 SpringBoot 应用。@SpringBootApplication 内部源码

@Target({ElementType.TYPE}) 这个是什么意思呢?咱们自定义注解的时候 也用过这个属性,注解的适用范围 对吧,表示 可以描述在类,接口,或枚举中。

@Retention(RetentionPolicy.RUNTIME) 可用范围,表示注解可以记录再javadoc中。@Inherited表示可以被子类继承该注解,@SpringBootConfiguration表示该类为配置类,@EnableAutoConfiguration表示启动自动配置功能 @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class) 注意:我们主要看后面 3 个注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个核心注解

@SpringBootConfiguration 

SpringBoot 的配置类,标注在某个类上,表示这是一个 SpringBoot的配置类。 这个注解的源码 如下: @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration // 配置类的作用等同于配置文件,配置类也是容器中的一个对象 public @interface SpringBootConfiguration { } 内部有一个核心注解@Configuration,这个注解是Spring框架提供的,表示当前类为一个配置类,并可以被组件扫描器扫描。这样一看的话是不是 @SpringBootConfiguration 与@Configuration 的作用是一样的,都是标识一个可以被组件扫描器扫描的配置类。只不过@SpringBootConfiguration 被Springboot重新封装命名了。

@EnableAutoConfiguration

Spring源码的时候 会看到很多以 Enable开头的注解,其作用就是借助@import 来收集并注册特定场景相关的bean,并加载到IOC容器。@EnableAutoConfiguration 就是做了这些事情。 @AutoConfigurationPackage 这个注解也是一个组合注解,其中最重要的注解是@Import(AutoConfigurationPackages.Registrar.class),它是Spring框架的底层注解,主要作用是给容器汇总导入某个组件类。它就是将 Registrar 这个组件类导入到容器中。可查看 Registrar 类中 registerBeanDefinitions 方法:

再看register方法:

其实就是干了一个事情,就是注册一个Bean。这个 Bean 就是org.springframework.boot.autoconfigure.AutoConfigurationPackages.BasePackages

总结:

1. 从spring.factories配置文件中加载自动配置类;

2. 加载的自动配置类中排除掉 @EnableAutoConfiguration 注解的exclude 属性指定的自动配置类;

3. 然后再用AutoConfigurationImportFilter 接口去过滤自动配置类是否符合其标注注解(若有标注的话)@ConditionalOnClass , @ConditionalOnBean 和 @ConditionalOnWebApplication 的条件,若都符合的话则返回匹配结果;

4. 然后触发 AutoConfigurationImportEvent 事件,告诉 ConditionEvaluationReport 条件评估报告器对象来分别记录符合条件和** exclude **的自动配置类。

5. 最后spring再将最后筛选后的自动配置类导入IOC容器中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值