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);
}
}
}