Spring提供了一个通用的基于条件来创建Bean
的注解@Conditional
注解。
通过实现Condition
接口,并重写其matches
方法来构造判断条件。
示例
条件:根据操作系统返回对应的内容。
定义判断条件
//Windows系统的判断条件 import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; public class WindowsCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return context.getEnvironment().getProperty("os.name").contains("Windows"); } } //Linux系统的判断条件 import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; public class LinuxCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return context.getEnvironment().getProperty("os.name").contains("Linux"); } }
不同系统下的Bean类
//接口 public interface ListService { public String showListCmd(); } //Windows下的实现类 public class WindowsListServiceImpl implements ListService { @Override public String showListCmd() { return "dir"; } } //Linux下的实现类 public class LinuxListServiceImpl implements ListService { @Override public String showListCmd() { return "ls"; } }
配置类
@Conditional()注解调用条件判断的类并根据返回的结果来创建Bean
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) public ListService windowsListService() { return new WindowsListServiceImpl(); } @Bean @Conditional(LinuxCondition.class) public ListService linuxListService() { return new LinuxListServiceImpl(); } }
运行类
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ConditionMain { 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()); //context.close(); } }
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载