Spring的条件装配

本文介绍了如何在Spring中实现条件装配,通过自定义注解@ConditionOnSystemProperty和实现Condition接口,根据系统属性动态决定是否将Bean注入到Spring容器。在测试代码中,当系统用户名为特定值时,Bean才会被加载并打印出'helloworld'。
摘要由CSDN通过智能技术生成

简介

条件装配顾名思义就是当满足了某种条件以后才会把对应的bean注入到spring容器中。使用条件的关键则是使用@Conditional这个注解。可以参考ConditionalOnProperty这个注解。

步骤

1、创建自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnSystemPropertyCondition.class})
public @interface ConditionOnSystemProperty {

    String value() default "";

    String name() default "";
}

2、创建OnSystemPropertyCondition类,并且实现Condition这个接口。

public class OnSystemPropertyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Map<String, Object> annotationAttributes
                = metadata.getAnnotationAttributes(ConditionOnSystemProperty.class.getName());

        String name=String.valueOf(annotationAttributes.get("name"));
        String value=String.valueOf(annotationAttributes.get("value"));
        String systemValue=System.getProperty(name);
        // 当返回true的时候才会把 使用该注解的bean加载到spring容器当中
        return value.equals(systemValue);
    }
}

3、编写测试代码

public class ConditionOnSystemApplication {

    @Bean
    @ConditionOnSystemProperty(name = "user.name",value = "41395") // 41395是我计算机名称
    public String helloWorld(){
        return "hello world";
    }

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext
                =new SpringApplicationBuilder(ConditionOnSystemApplication.class)
                .web(WebApplicationType.NONE)
                .run(args);

        String helloWorld = applicationContext.getBean("helloWorld", String.class);
        System.out.println(helloWorld);
    }
}

4、运行结果

hello world
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值