1.核心知识点:Condition接口,@conditional注解的使用
@Conditional(*.class)注解只初始化返回true的Bean
2.应用示例
配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConditionConfig {
@Bean
@Conditional(WindowCondition.class)
public WindowService win() {
return new WindowService();
}
@Bean
@Conditional(LinuxCondition.class)
public LinuxService linux() {
return new LinuxService();
}
}
实现Condition接口的类
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 arg1) {
return context.getEnvironment().getProperty("os.name").contains("Linux");
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConditionConfig {
@Bean
@Conditional(WindowCondition.class)
public WindowService win() {
return new WindowService();
}
@Bean
@Conditional(LinuxCondition.class)
public LinuxService linux() {
return new LinuxService();
}
}
业务逻辑类
public class LinuxService implements ListService{
@Override
public String ShowList() {
return "ls";
}
}
public class WindowService implements ListService{
@Override
public String ShowList() {
return "dir";
}
}
主类
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);
ListService service = context.getBean(ListService.class);
System.out.println("当前系统执行的是什么方法"+service.ShowList());
}
}
运行结果
17:37:30.843 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.liveBeansView.mbeanDomain' in PropertySource 'systemProperties' with value of type String
17:37:30.843 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'win'
当前系统执行的是什么方法dir
网友评论