Java四十四篇:springboot 的自动装配


程序入口

Java四十四篇:springboot 的自动装配
image.png

由springboot的自动配置原理,其入口是@SpringBootApplication注解

Java四十四篇:springboot 的自动装配
image.png

SpringBootApplication注解其实是SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三个注解的组合;

SpringBootConfiguration可以理解为Spring版的Configuration注解;

EnableAutoConfiguration:这是SpringBoot自动配置的入口里面有两个关键点

Java四十四篇:springboot 的自动装配
image.png

**@AutoConfigurationPackage:**设置SpringBoot自动扫描包点路径,当basePackages或basePackageClasses属性没有指定包扫描路径时默认从启动类所在当包开始扫描;

**@Import(AutoConfigurationImportSelector.class:**通过Import注解向Spring容器中注入一个类为AutoConfigurationImportSelector的bean,AutoConfigurationImportSelector实现了DeferredImportSelector类,该类中的getAutoConfigurationEntry方法中会将spring-boot-autoconfigure包下Resource/META-INF/spring.factories文件中以EnableAutoConfiguration为key值的所有配置类读取并筛选出来,这里面的类都是配置类,和我们自己写的以@Configuration标注的配置类作用相同,这里面基本包含了目前常用的组件配置。

解释

1.Springboot启动后,读取程序的启动类时,就会读取到@SpringBootApplication
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter(
{ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration
{

}

WebMvcAutoConfiguration这个类中使用的注解可以看出,要完成自动配置是有依赖条件的。

这些是springboot特有的,常见的条件依赖注解有:

@ConditionalOnSingleCandidate,仅在当前上下文中存在某个bean时,才会实例化这个Bean。

@ConditionalOnClass,某个class位于类路径上,才会实例化这个Bean。

@ConditionalOnExpression,当表达式为true的时候,才会实例化这个Bean。

@ConditionalOnMissingBean,仅在当前上下文中不存在某个bean时,才会实例化这个Bean。

@ConditionalOnMissingClass,某个class在类路径上不存在的时候,才会实例化这个Bean。

@ConditionalOnNotWebApplication,不是web应用时才会实例化这个Bean。

@AutoConfigureAfter,在某个bean完成自动配置后实例化这个bean。

@AutoConfigureBefore,在某个bean完成自动配置前实例化这个bean。

所以,自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件 ,并将其中对应的 org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。

总结

1、@Configuration&与@Bean->基于java代码的bean配置

2、@Conditional->设置自动配置条件依赖

3、@EnableConfigurationProperties与@ConfigurationProperties->读取配置文件转换为bean。

4、@EnableAutoConfiguration、@AutoConfigurationPackage 与@Import->实现bean发现与加载。

5、@EnableAutoConfiguration自动配置从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。

springboot启动加载所有的配置类(127个),按需加载所需配置类。

Java四十四篇:springboot 的自动装配
img

本篇文章来源于微信公众号: 小刘Java之路

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/11013.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!