spring @Conditional 按照条件注册bean

1、(先写一个实体类)User.class

package com.zdc.sp.model;

public class User {

    private String name;
    
    private Integer age;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public User(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }
    
    
}

2、(配置文件类)MyConfig2.class

package com.zdc.sp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

import com.zdc.sp.condition.LinuxCondition;
import com.zdc.sp.condition.WindowsCondition;
import com.zdc.sp.model.User;


@Configuration
public class MyConfig2 {

    /**
     * @Conditional;按照一定的条件进行判断,满足条件给容器中的注册bean;
     * 当该注解作用在类上面时,应当满足当前条件,这个类中的所有bean注册才能生效
     * @return
     */
    @Conditional(value={LinuxCondition.class})
    @Bean("linux")
    public User user(){
        return new User("张三", 24);
    }
    
    @Conditional(value={WindowsCondition.class})
    @Bean("windows")
    public User user1(){
        return new User("李四", 24);
    }
}
 

3、过滤条件

1、WindowsCondition类

package com.zdc.sp.condition;

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

//判断windows系统
public class WindowsCondition implements Condition{

    @Override
    public boolean matches(ConditionContext context,
            AnnotatedTypeMetadata metadata) {
        // TODO 
        //获取到ioc使用的beanfactory
        ConfigurableBeanFactory factory = context.getBeanFactory();

        //获取类加载器
        ClassLoader loader = context.getClassLoader();
        
        //获取到bean定义的注册类
        BeanDefinitionRegistry registry  = context.getRegistry();
        
        
        //获取当前环境信息
        Environment environment = context.getEnvironment();
        
        //获取当前运行环境
        String property = environment.getProperty("os.name");
        System.out.println(property);
        if (property.contains("Window")) {
            return true;
        }
        return false;
    }

}
2、LinuxCondition类

package com.zdc.sp.condition;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

//判断linux系统
public class LinuxCondition implements Condition{

    @Override
    public boolean matches(ConditionContext context,
            AnnotatedTypeMetadata metadata) {
        //获取当前环境信息
                Environment environment = context.getEnvironment();
                
                //获取当前运行环境
                String property = environment.getProperty("os.name");
                if (property.contains("linux")) {
                    return true;
                }
        return false;
    }

}
 

4、测试

package com.zdc.sp.main;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.zdc.sp.config.MyConfig;
import com.zdc.sp.config.MyConfig2;

public class Main1 {

    public static void main(String[] args) {
        //获取配置文件
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig2.class);
        String[] cons = context.getBeanDefinitionNames();
        for (String string : cons) {
            System.out.println(string);
        }
    }
}
 

猜你喜欢

转载自blog.csdn.net/u014450465/article/details/89321826