zoukankan      html  css  js  c++  java
  • springboot4自动配置的原理(浅层)

    自动配置的原理(浅层)

    @Configuration 		//这是一个配置类
    @EnableConfigurationProperties(HttpProperties.class)//启用ConfigurationProperties功能,将配置文件中的值和httpproperties绑定起来,加入到容器中
    @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)//根据不同的条件来判断是不是生效
    @ConditionalOnClass(CharacterEncodingFilter.class)//判断当前项目有没有这个类,乱码过滤器
    
    @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) //判断配置文件是否存在某些配置;默认已经注入了这些值,不配置也是默认生效的
    
    public class HttpEncodingAutoConfiguration {
    
        private final HttpProperties.Encoding properties;
    
        //只有一个有参构造器的时候,从容器中获取
    	public HttpEncodingAutoConfiguration(HttpProperties properties) {
    		this.properties = properties.getEncoding();
    	}
        @Bean//这个组件的某些值需要在properties文件取得
    	@ConditionalOnMissingBean
    	public CharacterEncodingFilter characterEncodingFilter() {
    		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
    		filter.setEncoding(this.properties.getCharset().name());
    		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
    		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
    		return filter;
    	}
    

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

    @ConfigurationProperties(prefix = "spring.http")//从配置文件中获取值与属性绑定
    public class HttpProperties {
    
        /**
    	 * Configuration properties for http encoding.
    	 */
    	public static class Encoding {
    
    		public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
    

    xxxxAutoConfiguration 自动配置类

    xxxxProperties properties文件封装配置信息

    @Conditional 用来进行判断的注解 springboot有很多派生的注解

    @ConditionaOnBean

    @ConditionaOnMissingBean

    ...

    自动配置类的条件之后才会生效

    debug=true #可以打印很多信息,能够查看哪个自动配置类是生效的
    
  • 相关阅读:
    核心容器的两个接口(ApplicationContext和BeanFactory)引发出的问题
    ApplicationContext的三个常用实现类:
    IDEA如何找到接口的实现类
    编写BeanFactory
    9.4 Binder系统_驱动情景分析_服务使用过程
    9.3 Binder系统_驱动情景分析_服务获取过程
    9.2 Binder系统_驱动情景分析_服务注册过程
    9.1 Binder系统_C程序示例_框架分析和编写程序
    8.6 Android灯光系统_源码分析_背光灯
    8.5 Android灯光系统_源码分析_通知灯
  • 原文地址:https://www.cnblogs.com/lovestart/p/11220429.html
Copyright © 2011-2022 走看看