一.自定义条件的自动装配,需要配合@Conditional注解和Condition接口的实现类一起使用。
二.系统已经存在的一些Conditional条件注解,
具体使用如下所示:
1.Condition接口的实现类
public class UTFCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding=System.getProperty("file.encoding");
if("UTF-8".equals(encoding)) {
return true;
}
return false;
}
}
public class GBKCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding=System.getProperty("file.encoding");
if("GBK".equals(encoding)) {
return true;
}
return false;
}
}
2.使用自定义的condition条件和使用系统存在的condition条件
@SpringBootConfiguration
public class SpringConfiguration {
@Bean
@Conditional(GBKCondition.class)
public Runnable createRunnable0() {
return ()->{};
}
@Bean
@Conditional(UTFCondition.class)
public Runnable createRunnable1() {
return ()->{};
}
@Bean
@ConditionalOnProperty(name="local.port",havingValue="8080",matchIfMissing=true)//根据name属性的值和havingValue的值进行比较,如果相等则加载对应的bean,matchIfMissing不存在对应的属性则创建对应的bean
public Runnable createRunnable2() {
return ()->{};
}
@Bean
@ConditionalOnBean(name="user")//判断对应name名字的bean是否存在,如果存在则创建此createRunnable3的bean,@ConditionalOnMissingBean于此相反
public Runnable createRunnable3() {
return ()->{};
}
@Bean
@ConditionalOnClass(name="com.example.demo.User2") //判断根据对应name名字对应路径的类是否存在,如果存在则创建此createRunnable4的bean,ConditionalOnMissingClass于此相反
public Runnable createRunnable4() {
return ()->{};
}
}
3.启动spring boot查看对应的类是否存在
ConfigurableApplicationContext context=SpringApplication.run(DemoApplication.class, args);
System.out.println(System.getProperty("file.encoding"));
System.out.println(context.getBeansOfType(Runnable.class));