javaEE颠覆者第三章
3.4 条件注解
使用@Conditional来判断Bean创建的条件
(1)判断条件的定义
1.判定Windows
package spring4.conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class WindowsCondition implements Condition{
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Windows");
}
}
2.判定Linux
package spring4.conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class LinuxCondition implements Condition{
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Linux");
}
}
(2)不同系统下的Bean
1.接口
package spring4.conditional;
public interface ListService {
public String showListCmd();
}
2.Windows下所要创建的Bean类
package spring4.conditional;
public class WindowsListService implements ListService{
public String showListCmd() {
return "dir";
}
}
3.Linux下所要创建的Bean类
package spring4.conditional;
public class LinuxListService implements ListService{
public String showListCmd() {
// TODO Auto-generated method stub
return "ls";
}
}
(3)配置类
package spring4.conditional;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConditionConfig {
@Bean
@Conditional(WindowsCondition.class) //通过WindowsCondition的不同返回 来判断是否调用
public ListService windowsListService() {
return new WindowsListService();
}
@Bean
@Conditional(LinuxCondition.class) //通过LinuxCondition的不同返回 来判断是否调用
public ListService linuxListService() {
return new LinuxListService();
}
}
(4)运行
package spring4.conditional;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);
ListService listService = context.getBean(ListService.class);
System.out.println(context.getEnvironment().getProperty("os.name")+" 系统下的列表命令"+listService.showListCmd());
}
}
不同系统的结果
Windows的结果
Linux的结果