美文网首页
Spring高级应用 之条件化初始化Bean

Spring高级应用 之条件化初始化Bean

作者: Tango_520f | 来源:发表于2018-02-22 17:47 被阅读370次

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

相关文章

网友评论

      本文标题:Spring高级应用 之条件化初始化Bean

      本文链接:https://www.haomeiwen.com/subject/tmyztftx.html