IOC_____条件注入与Profile(特殊的条件注入)

条件注入
在我们需要切换工作环境的时候,就会用到Profile:
简单的介绍一下代码:

1、XML配置:

<beans profile="dev">
		<bean class="com.pojo.User" id="user">
			<property name="name" value="zsl" />
		</bean>
	</beans>
	
	<beans profile="pro">
		<bean class="com.pojo.User" id="user">
			<property name="name" value="zsl" />
		</bean>
	</beans>

测试类:

ClassPathXmlApplicationContext applicationContext = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		applicationContext.getEnvironment().setActiveProfiles("dev");
		applicationContext.refresh();
		User bean = (User) applicationContext.getBean("user");
		System.out.println(bean);

2、Java配置类:

@Configuration
@ComponentScan(basePackages="com.controller,com.service,com.dao,com.pojo")
public class App {
	@Bean("user")
	@Profile("pro")
	public User proUser() {
		// TODO Auto-generated method stub
		User user = new User();
		return user;
	}
	
	@Bean("user")
	@Profile("dev")
	public User devUser() {
		// TODO Auto-generated method stub
		User user = new User();
		return user;
	}
}

测试:

		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
		applicationContext.getEnvironment().setActiveProfiles("dev");
		applicationContext.register(App.class);
		applicationContext.refresh();
		User bean = (User) applicationContext.getBean("user");
		bean.setName("卢本伟牛逼");
		System.out.println(bean);

二、条件注解Condition
Profile是条件注解的一种特殊形式,条件注解更加灵活,用户可以根据各种不同的条件使用不同的Bean。
SpringBoot中提供了许多自动化的配置,例如数据库配置,SpringBoot使用条件注解提前配置好许多常用的类,使用条件注解,在某一个条件满足时,这些配置就会生效。

Java配置的方式:

Java配置类:

@Configuration
public class App {
	@Bean("show")
	@Conditional(ConditionA.class)//
	public ShowA proUser() {
		// TODO Auto-generated method stub
		ShowA showA = new ShowA();
		return showA;
	}
	
	@Bean("show")
	@Conditional(ConditionB.class)//
	public ShowB devUser() {
		// TODO Auto-generated method stub
		ShowB showB = new ShowB();
		return showB;
	}
}

定义接口:Ishow

public interface IShow {
public String show();
}

ShowA和ShowB

public class ShowA implements IShow {

	@Override
	public String show() {
		// TODO Auto-generated method stub
		return "ShowA";
	}

}

public class ShowB implements IShow{

	@Override
	public String show() {
		// TODO Auto-generated method stub
		return "ShowB";
	}

}

条件类需要实现接口Condition:

/**
*返回true则选择该条件
*
**/
public class ConditionA implements Condition{

	@Override
	public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) {
		// TODO Auto-generated method stub
		String[] profiles = arg0.getEnvironment().getActiveProfiles();
		for (String string : profiles) {
			
			if (string.contains("A")) {
				return true;
			}
		}
		return false;
	}

}
/**
*返回true则选择该条件
*
**/
public class ConditionB implements Condition{

	@Override
	public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) {
		// TODO Auto-generated method stub
		String[] profiles = arg0.getEnvironment().getActiveProfiles();
		for (String string : profiles) {
			
			if (string.contains("B")) {
				return true;
			}
		}
		return false;
	}

}

测试类:

AnnotationConfigApplicationContext applicationContext = 
				new AnnotationConfigApplicationContext();
		applicationContext.getEnvironment().setActiveProfiles("A");
		applicationContext.register(App.class);
		applicationContext.refresh();
		IShow bean = (IShow) applicationContext.getBean("show");
		System.out.println(bean.show());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷偷学习被我发现

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值