自动配置原理 -剖析springboot-1.5.21

0,参看文章

https://www.cnblogs.com/xiaoxi/p/7999885.html

 

将自动配置的关键几步以及相应的注解总结如下:

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

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

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

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

 

1,在applicatio.yml中可以写什么!看如下官方文档

https://docs.spring.io/spring-boot/docs/1.5.21.RELEASE/reference/html/common-application-properties.html

2,

(a)Springboot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration

   (b) @EnableAutoConfiguration作用:

     -利用EnableAutoConfigurationImportSelector导入容器的一些组件【@Import({EnableAutoConfigurationImportSelector.class})

     - EnableAutoConfigurationImportSelector的父类AutoConfigurationImportSelectorselectImports( )方法会返回一个configurations。即List<String>configurations=this.getCandidateConfigurations(annotationMetadata,attributes);获取候选的配置

     --getCandidateConfigurations()方法作用使用SpringFactoriesLoader.loadFactoryNames。而loadFactoryNames( )方法

 

--先剖析loadFactoryNames(Class<?>factoryClass,ClassLoaderclassLoader)的作用:从类路径下获到资源,就是扫描所有jar类路径下的"META-INF/spring.factories"资源

先将所有的spring.factories的路径urls,然后遍历为properties对象,然后从properties对象获得某些值getProperty(factoryClassName)值封装为result返回。

--再剖析getSpringFactoriesLoaderFactoryClass()的作用:获取EnableAutoConfiguration类

 

  去看,可知道把下面中EnableAutoConfiguration类名对应的值绿色部分添加到ioc容器中

 

--总结getCandidateConfigurations(annotationMetadata,attributes);的作用:类路径下的"META-INF/spring.factories" 里面配置的所有EnableAutoConfiguration类名对应的值绿色部分 按需要添加到ioc容器中。每一个XXXAutoConfiguration自动配置类,例如org.springframework.boot.autoconfigure.aop.AopAutoConfiguration 都将成为ioc容器中的一个组件。

 (c)以HttpEncodingAutoConfiguration类来剖析自动配置原理

-剖析注解

@Configuration //表示这是一个配置类,像以前给spring编写的配置文件一样,现用于给容器中添加组件

@EnableConfigurationProperties({HttpEncodingProperties.class}) //启动指定类的ConfigurationProperties功能;并把{HttpEncodingProperties.class加到ioc容器中

@ConditionalOnWebApplication  //这是Spring的底层@Conditional注解,根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效。 作用判断当前应用是否web应用

@ConditionalOnClass({CharacterEncodingFilter.class}) //判断当前当前类中是否有CharacterEncodingFilter.class 它可是springMVC中的解决乱码的拦截器

@ConditionalOnProperty(

prefix="spring.http.encoding",

value={"enabled"},

matchIfMissing=true

)//判断配置文件中是否存在某个配置  这里是spring.http.encoding.enabled   如果不存在,判断也应该成立。即配置文件中不存在spring.http.encoding.enabled,判断也应该成立。

 

--去看HttpEncodingProperties应该是从配置文件中的“spring.http.encoding”部分获取指定的值和bean属性

 

 

 

---例如我自己编写的person类通过@ConfigurationProperties()获取指定的值和bean属性

 

 

 

感觉HttpEncodingProperties就是一个和person一样作用的实体类。总结:所有在配置文件中能配置的属性都在XXXProperties类封装着

-继续剖析HttpEncodingAutoConfiguration如下:

而生成CharacterEncodingFilter的某些值是需要this.properties.中获取

 所以我们能配置下面这些属性哦!

 

 

-总结:XXXAutoConfiguration 根据当前不同条件判断,决定这个配置类是否生效。一旦生效,这个配置类就会给容器中添加各种组件(组件属性是从properties类中获取的 ),这些类的每一个属性又是和配置文件绑定的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"could not download kotlin-compiler-embeddable-1.5.21.jar" 表示无法下载 kotlin-compiler-embeddable-1.5.21.jar 这个文件。 这个问题可能出现在你尝试从某个源或仓库下载该文件时。有几种可能的原因导致无法下载该文件: 1. 网络连接问题:你的网络连接可能存在问题,无法连接到服务器或无法获得足够高速的下载速度。你可以尝试重新连接网络或者更换网络环境,确保网络连接的稳定性。 2. 源或仓库问题:源或仓库可能存在访问限制、链接错误或者文件损坏的情况。你可以尝试使用其他源或者仓库,或者联系源或仓库的管理员进行问题排查和解决。 3. 依赖冲突:可能存在与 kotlin-compiler-embeddable-1.5.21.jar 冲突的依赖关系。你可以检查你的项目依赖关系,并尝试解决冲突问题。 解决这个问题的方法有多种途径: 1. 检查网络连接:确认你的网络连接正常,并且能够正常访问互联网。如果网络连接有问题,修复网络问题后再次尝试下载。 2. 更换源或仓库:尝试使用其他可用的源或仓库进行下载。例如,可以更换 Maven 中央仓库为其他镜像仓库。 3. 清理缓存并重新尝试:删除本地 Maven 或 Gradle 的缓存,并重新构建项目,再次尝试下载该文件。 4. 联系管理员或寻求帮助:如果以上方法都没有解决问题,你可以联系源或仓库的管理员寻求帮助,或者询问相关技术社区,寻求其他开发者的建议和经验。 总结起来,在遇到无法下载 kotlin-compiler-embeddable-1.5.21.jar 文件时,你可以检查网络连接、更换源或仓库、清理缓存并重新尝试,或者联系管理员或寻求帮助,以解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值