Spring注解@Conditional--根据条件创建bean
一、源码二、 作用conditon:条件三、例子其中bill和linux是人名1、定义person类:2、定义条件类@Conditional中包含condition数组,所以定义两个条件类其中:【Environment environment = context.getEnvironment();String propert...
·
一、源码
二、 作用
conditon:条件
三、例子
其中bill和linux是人名
1、定义person类:
2、定义条件类
@Conditional中包含condition数组,所以定义两个条件类
其中:
【 Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
可以获得操作系统的名字;】
package com.atguigu.condition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
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;
//判断是否linux系统
public class LinuxCondition implements Condition {
/**
* ConditionContext:判断条件能使用的上下文(环境)
* AnnotatedTypeMetadata:注释信息
*/
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// TODO是否linux系统
//1、能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、获取类加载器
ClassLoader classLoader = context.getClassLoader();
//3、获取当前环境信息
Environment environment = context.getEnvironment();
//4、获取到bean定义的注册类
BeanDefinitionRegistry registry = context.getRegistry();
String property = environment.getProperty("os.name");
//可以判断容器中的bean注册情况,也可以给容器中注册bean
boolean definition = registry.containsBeanDefinition("person");
if(property.contains("linux")){
return true;
}
return false;
}
}
package com.atguigu.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;
//判断是否windows系统
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
if(property.contains("Windows")){
return true;
}
return false;
}
}
3、配置类MainConfig2.java
如果是windows系统,就会返回true,此时就加载bill对象;
如果是linux系统,就会返回true,此时就加载linux对象;
注,如果定义在方法上:
4、测试
@Test
public void test03(){
nnotationConfigApplicationContext applicationContext = new
AnnotationConfigApplicationContext(MainConfig2.class);
Map<String, Person> persons = applicationContext.getBeansOfType(Person.class);
System.out.println(persons);
}
结果:
说明:当前是Windows系统,所以创建了bill对象。
======以下于你或许是个好消息======
好消息就是:欢迎访问下面的博客网站哈哈哈......
网站名称:Java学习笔记网 (点击进入)
url:https://www.javaxxbj.com/ (点击进入)
网站特点:
- java主要网站的导航目录
- 你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!
- 可以添加收藏各个网站的链接!!!
- 甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1
看一小点点的截图:
或可一试哦!
更多推荐
已为社区贡献2条内容
所有评论(0)