0%

注解Conditional按条件注入bean

文章字数:97,阅读全文大约需要1分钟

根据一定的条件判断是否注入bean

声明两个条件

  • Windows环境下注入bean的条件
1
2
3
4
5
6
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEvironment().getProperty("os.name").contains("Windows");
}
}
  • Linux环境下注入bean的条件
1
2
3
4
5
6
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEvironment().getProperty("os.name").contains("Linux");
}
}

使用条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class ConditionConfig {
@Bean
@Conditional(WindowsCondition.class)
public MyService windowMyService() {
// ...
}

@Bean
@Conditional(LinuxCondition.class)
public MyService linuxMyService() {
// ...
}
}

其它衍生的注解

1
2
3
@ConditionalOnMissingBean(xx.class) // 没有xx.class bean时注入
@ConditionalOnBean(xx.class) // 有xx.class bean 时注入
...