SpringBoot分析自动配置类+HttpEncodingAutoConfiguration案例+@Conditional派生注解+判断自动配置类是否生效

本文深入探讨SpringBoot的自动配置机制,详细解析HttpEncodingAutoConfiguration的实现原理,以及如何通过条件注解@Conditional来判断自动配置类是否生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1自动配置类

前面SpringBoot启动的主入口注解SpringBootApplication分析有讲到自动配置了,下面是更细的说明

 

步骤

  1. 加载所有的配置类
  2. 读取这个配置类的条件,判断是否生效,如果生效,加载配置了bean方法添加的组件,这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
     

1

 

具体的配置类如下

 

2 HttpEncodingAutoConfiguration解释自动配置原理

 

 

 

 */
@Configuration  //表示这是个配置类,会把bean标志的方法返回的bean注入到容器中
@EnableConfigurationProperties(HttpEncodingProperties.class)//将指定类加载到容器中,实现指定类与配置文件一一映射

如果满足指定的条件,整个配置类里面的配置就会生效,判断当前应用是否是web应用,如果是,当前配置类(HttpEncodingAutoConfiguration)生效(注意:下面还有2个条件)
@ConditionalOnWebApplication
同理
@ConditionalOnClass(CharacterEncodingFilter.class)、
//判断配置文件中是否存在某个配置 spring.http.encoding.enabled;如果不存在,默认返回ture
//换句话说:即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {

    private final HttpEncodingProperties properties;

    public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
        this.properties = properties;
    }

    @Bean
    @ConditionalOnMissingBean(CharacterEncodingFilter.class)
    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;
    }
 

 

上面代码@EnableConfigurationProperties(HttpEncodingProperties.class)

 

 

 

3@Conditional派生注解

  • @ConditionalOnJava    系统的java版本是否符合要求
  • @ConditionalOnBean   容器中存在指定Bean;
  • @ConditionalOnMissingBean    容器中不存在指定Bean;
  • @ConditionalOnExpression    满足SpEL表达式指定
  • @ConditionalOnClass    系统中有指定的类
  • @ConditionalOnMissingClass    系统中没有指定的类
  • @ConditionalOnSingleCandidate    容器中只有一个指定的Bean,或者这个Bean是首选Bean
  • @ConditionalOnProperty     系统中指定的属性是否有指定的值
  • @ConditionalOnResource    类路径下是否存在指定资源文件
  • @ConditionalOnWebApplication   当前是web环境
  • @ConditionalOnNotWebApplication    当前不是web环境
  • @ConditionalOnJndi JNDI         存在指定项

4判断自动配置类是否生效

  • Positive matches:(启用自动配置类) 
  • Negative matches:(没有启动的自动配置类)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值