Spring的条件装配

简介

条件装配顾名思义就是当满足了某种条件以后才会把对应的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
posted @ 2022-07-18 16:44  bulingfeng  阅读(101)  评论(0编辑  收藏  举报