盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

spring Condition使用

分享牛 2418℃

摘要:

    在实际项目开发中,可能需要根据不同的条件来创建同一个接口下的不同的bean实例对象,类似于我们项目中有开发环境、测试环境进而实现一些文件的不同环境下的自动切换。根据不同的条件来创建同一个接口下的不同的bean实例对象可以使用spring中的@Conditional注解来实现。

    @Conditional可以根据某一个指定的条件创建bean实例对象,比如当一个jar包存在于指定的类路径下,自动装配bean。总的来说一句话,根据不同的条件控制bean实例对象的创建。

    在spring boot中会大量的用到该特性。

    下面的实例使用场景如下:

    比如windows系统与linux系统中显示文件的命令是不同的,windows中的命令为”dir“,linux为”ls“。

    下面我们开始实现

1条件的定义

1.1判断windows系统的类

public class WinCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();//获取环境变量
String osName = environment.getProperty("os.name");//获取os.name
return osName.contains("Windows");
}
}

1.2判断linux系统的类

public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();//获取环境变量
String osName = environment.getProperty("os.name");//获取os.name
return osName.contains("Linux");
}
}

2不同系统下的获取命令类

2.1接口定义

public interface CmdService {
public String showListCmd();//获取显示文件的方法
}

2.2 windows命令类

public class WinCmd  implements CmdService{
@Override
public String showListCmd() {
return "dir";
}
}

2.3 linux命令类

public class LinuxCmd  implements CmdService{
@Override
public String showListCmd() {
return "ls";
}
}

3 配置类

@Configuration
public class ShareniuConfig {
@Bean
@Conditional(WinCondition.class)
public CmdService winCmd(){
return new WinCmd();
}
@Bean
@Conditional(LinuxCondition.class)
public CmdService linuxCmd(){
return new LinuxCmd();
}
}

配置类说明:

如果是windows则实例化WinCmd类。

如果是linux则实例化LinuxCmd类。

4 测试类

public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context=new
AnnotationConfigApplicationContext(ShareniuConfig.class);
CmdService cmdService = context.getBean(CmdService.class);
String showListCmd = cmdService.showListCmd();
System.out.println(showListCmd);

}
}

输出结果如下:

dir

转载请注明:分享牛 » spring Condition使用