在spring boot之@Profile模拟开发环境灵活配置(5)中通过活动的profile,可以获取到不同bean。
@Conditional:
满足某一个特定条件创建指定的一个Bean或多个Bean(根据特定条件来控制Bean的创建)
使用场景:
1.当某一个jar包在某个类路径下,自动装配一个Bean或多个Bean;
2.只有某个bean创建时,才会创建另一个bean。
@Conditional:
满足某一个特定条件创建指定的一个Bean或多个Bean(根据特定条件来控制Bean的创建)
使用场景:
1.当某一个jar包在某个类路径下,自动装配一个Bean或多个Bean;
2.只有某个bean创建时,才会创建另一个bean。
实例:通过实现Condition接口并重写matches方法来构造判断条件,若w7系统输出w7,若linux 输出lx
1.//判定条件
package com.zh.ch3.conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class WindowsCondition implements Condition {
//判定windows的条件
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Windows");
}
}
package com.zh.ch3.conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class LinuxCondition implements Condition {
//判定linux的条件
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Linux");
}
}
抽象接口:
package com.zh.ch3.conditional;
public interface ListService {
public String showListCmd();
}
根据指定的条件创建指定的bean
package com.zh.ch3.conditional;
//linux下所要创建的Bean的类
public class LinuxListService implements ListService{
@Override
public String showListCmd() {
return "lx";
}
}
package com.zh.ch3.conditional;
//windows下所要创建的Bean的类
public class WindowsListService implements ListService {
@Override
public String showListCmd() {
return "w7";
}
}
config配置
package com.zh.ch3.conditional;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConditionConifg {
@Bean
@Conditional(WindowsCondition.class) //1@Conditional,符合windows条件则实例化windowsListService
public ListService windowsListService() {
return new WindowsListService();
}
@Bean
@Conditional(LinuxCondition.class) //2@Conditional,符合linux条件则实例化linuxListService
public ListService linuxListService() {
return new LinuxListService();
}
}
测试类
package com.zh.ch3.conditional;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConifg.class);
ListService listService = context.getBean(ListService.class);
System.out.println(context.getEnvironment().getProperty("os.name") + "——输出的命令为: " + listService.showListCmd());
context.close();
}
}
结果:Windows 7——输出的命令为: w7(w7环境下!)