ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Springboot之自动装配原理

2021-08-06 18:32:12  阅读:253  来源: 互联网

标签:装配 Springboot 配置文件 配置 自动 注解 原理 class


1. 自动装配回顾

在主配置类中有@SpringBootApplication注解

在@SpringBootApplication中有一个自动装配的注解@EnableAutoConfiguration

 

@EnableAutoConfiguration注解中导入了@Import(AutoConfigurationImportSelector.class)
AutoConfigurationImportSelector.class包含获得候选配置的方法getCandidateConfigurations
getCandidateConfigurations中含有SpringFactoriesLoader.loadFactoryNames来获取包名
查看SpringFactoriesLoader.loadFactoryNames 发现返回的是loadSpringFactories
查看loadSpringFactories 步骤如下:
1.使用枚举类型接收META-INF/spring.factories中的内容
META-INF/spring.factories中储存的是springboot自动装配的jar包
2.接收url,将接收内容封装为property
3.返回

2.配置文件到底能写什么?怎么写?

SpringBoot官方文档中有大量的配置,我们无法全部记住

以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理;

 

 注解如下

@Configuration(proxyBeanMethods = false)配置类
@EnableConfigurationProperties(ServerProperties.class)  配置文件
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)
判断生效条件
进入ServerProperties类
发现

 


此注解同上篇yaml批量注入


即ServerProperties 通过yaml关联配置 在通过主配置类实现自动装配


总结:

1、SpringBoot启动会加载大量的自动配置类

 

2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

 

3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

 

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

 

xxxxAutoConfigurartion:自动配置类;给容器中添加组件

 

xxxxProperties:封装配置文件中相关属性;

附:在yaml中使用debug = true输出生效的jar包

 


@Conditional派生注解(Spring注解版原生的@Conditional作用)


 

 

 

 
 

 

标签:装配,Springboot,配置文件,配置,自动,注解,原理,class
来源: https://www.cnblogs.com/ywy1/p/15109911.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有