简介
条件装配顾名思义就是当满足了某种条件以后才会把对应的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