首页 > 其他 > 详细

分析自动配置原理

时间:2020-12-30 22:17:13      阅读:38      评论:0      收藏:0      [点我收藏+]

分析自动配置原理

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

//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件;表示交给springboot去配置
@Configuration
?
//启动指定类的ConfigurationProperties功能;
 //进入这个HttpProperties查看,将配置文件中对应的值和HttpProperties绑定起来;
 //并把HttpProperties加入到ioc容器中
//自动配置属性,表示springboot可以对其自动的配置
@EnableConfigurationProperties({HttpProperties.class})
?
//Spring底层@Conditional注解
 //根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效;
 //这里的意思就是判断当前应用是否是web应用,如果是,当前配置类生效
@ConditionalOnWebApplication(
   type = Type.SERVLET
)
?
//判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;
@ConditionalOnClass({CharacterEncodingFilter.class})
?
//判断配置文件中是否存在某个配置:spring.http.encoding.enabled;
 //如果不存在,判断也是成立的
 //即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
@ConditionalOnProperty(
   prefix = "spring.http.encoding",
   value = {"enabled"},
   matchIfMissing = true
)
?
public class HttpEncodingAutoConfiguration {
   //他已经和SpringBoot的配置文件映射了
   private final Encoding properties;
   //只有一个有参构造器的情况下,参数的值就会从容器中拿
   public HttpEncodingAutoConfiguration(HttpProperties properties) {
       this.properties = properties.getEncoding();
  }
   
   //给容器中添加一个组件,这个组件的某些值需要从properties中获取
   @Bean
   @ConditionalOnMissingBean //判断容器没有这个组件?
   public CharacterEncodingFilter characterEncodingFilter() {
       CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
       filter.setEncoding(this.properties.getCharset().name());
       filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));
       filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));
       return filter;
  }
   //。。。。。。。
}

一句话总结 :根据当前不同的条件判断,决定这个配置类是否生效!

  • 一但这个配置类生效;这个配置类就会给容器中添加各种组件;

  • 这些组件的属性是从对应的properties类(从spring.factories)中获取的,这些类里面的每一个属性又是和配置文件(这里指的是pow.xml)
    绑定的;

  • 所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;

  • 配置文件能配置什么就可以参照某个功能对应的这个属性类

在application.yaml中

技术分享图片

 

分析自动配置原理

原文:https://www.cnblogs.com/yaoyaoo/p/14212271.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!