org.springframework.context.annotation.Condition 这个类有什么作用?


org.springframework.context.annotation.Condition 接口是 Spring 框架中用于条件性地注册 Beans 的一部分,特别是在使用 Java 配置时。它允许开发者根据特定的条件动态地决定是否创建和注册某个 Bean,增强了 Spring 应用的灵活性和可配置性。

条件判断

Condition 接口用于定义一组条件,这些条件在应用上下文启动或配置时会被检查。通过实现该接口,开发者可以编写自定义的条件逻辑,决定某个 Bean 是否应该被注册。

与 @Conditional 注解结合使用

通常,Condition 接口与 @Conditional 注解一起使用。通过在类或者方法上添加 @Conditional 注解,并指定一个或多个 Condition 实现类,可以控制这些 Beans 的注册。

增强配置的灵活性

使用 Condition 接口,开发者可以根据不同的环境配置(如环境变量、系统属性、特定条件等)决定加载哪些 Bean。这使得应用能够在不同的环境中(如开发、测试、生产)表现出不同的行为,而无需在代码中做大量的条件判断。

关键方法:

  • boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata):
    • 该方法是 Condition 接口的核心方法,用于判断条件是否匹配。
    • ConditionContext 提供了访问当前应用上下文的信息,例如环境配置、 Bean 工厂等。
    • AnnotatedTypeMetadata 提供了有关被注解的类或方法的元数据,可以用于根据注解的属性判断条件。

代码示例:

import org.springframework.context.annotation.Condition;  
import org.springframework.context.annotation.ConditionContext;  
import org.springframework.core.type.AnnotatedTypeMetadata;  

public class MyCustomCondition implements Condition {  

    @Override  
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {  
        String property = context.getEnvironment().getProperty("my.custom.property");  
        return "enabled".equalsIgnoreCase(property);  
    }  
}  

// 使用自定义条件  
import org.springframework.context.annotation.Conditional;  
import org.springframework.context.annotation.Configuration;  

@Configuration  
@Conditional(MyCustomCondition.class)  
public class MyConfig {  
    // 这个 Bean 只会在 my.custom.property 被设置为 "enabled" 时才会被注册  
}

org.springframework.context.annotation.Condition 接口的作用是提供一种机制来条件性地注册 Spring Bean,允许开发人员根据运行时环境或其他条件动态地决定 Bean 的加载,增强了 Spring 应用的灵活性和可维护性。

package com.xiangyixiang.www.cloud.business.gateway.configure; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; import org.springframework.web.util.pattern.PathPatternParser; import java.util.stream.Collectors; /**网关统一配置允许跨域 * zj 解决跨域问题 * @author 张静 */ @Configuration public class CorsConfig { @Bean public CorsWebFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedMethod("*"); config.addAllowedOrigin("http://39.105.36.172:9250"); config.addAllowedHeader("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser()); source.registerCorsConfiguration("/**", config); return new CorsWebFilter(source); } @Bean @ConditionalOnMissingBean public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) { return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList())); } }
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿胡爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值