admin管理员组文章数量:1599529
**
SpringBoot中Condition注解条件的使用
**
小编的场景是:想根据Linux和Windows不同环境而注入不同的Bean
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//1、能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、获取类加载器
ClassLoader classLoader = context.getClassLoader();
//3、获取当前环境信息
Environment environment = context.getEnvironment();
//4、获取到bean定义的注册类
BeanDefinitionRegistry registry = context.getRegistry();
Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
//此处也可以获取到配置文件的信息,比如获取配置文件中的端口
String port = environment.getProperty("server.port");
//若果系统是linux 并且 启动端口是8080则允许注入bean
if(property.contains("Linux") && port.equals("8080")){
return true;
}
return false;
}
}
使用方法: 此处以配置为例, 在win10本地启动不注入Bean
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
//类中组件统一设置。满足当前条件,这个类中配置的所有bean注册才能生效;
//也可以加在方法上。此时只有这个加了条件的Bean满足条件才会注入。
@Conditional({LinuxCondition.class})
@Configuration
public class MainConfig {
@Conditional({LinuxCondition.class})
@Bean
public ExtraWork ExtraWork(){
return new ExtraWork();
}
@Bean
public LocalWork LocalWork(){
return new LocalWork();
}
}
本文标签: 注解配置文件条件内容SpringBoot
版权声明:本文标题:SpringBoot中Condition注解条件的使用获取配置文件内容 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728324348a1154237.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论