SSM-Spring-Spring装配Bean-条件化装配Bean

本文介绍了Spring中使用@Conditional注解和Condition接口实现条件化装配Bean的机制,通过匹配环境变量来决定是否装配数据源。在DataSourceCondition类中,实现了matches方法检查相关数据库配置是否存在,如果满足条件,则装配数据源Bean。
摘要由CSDN通过智能技术生成

SSM-Spring-Spring装配Bean-条件化装配Bean

  1. Spring中提供了@Conditional注解实现条件化是否装配bean,这样可以根据条件动态的装配bean;
  2. 要判定@Conditional 注解是否该装配bean还需要Condition 接口配合,我们只须实现 Condition 接口,重写matches 方法;
  3. 根据matches方法返回的布尔值进行判定@Conditional是否需要装配bean
//实现接口Condition
public class DataSourceCondition implements Condition {
    //重写matches 
	@Override
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		//获取上下文环境
		Environment env = context.getEnvironment();
		//判断是否存在关于数据源的基础配置
		return env.containsProperty("jdbc.database.driver") 
				&& env.containsProperty("jdbc.database.url")
				&& env.containsProperty("jdbc.database.username")
				&& env.containsProperty("jdbc.database.password");
	}
}

条件化装配数据源:

	@Bean(name = "dataSource")
	//通过传入实现Condition的类,调用重写matches方法,返回判断结果,true则装配Bean
	@Conditional({DataSourceCondition.class})
	public DataSource getDataSource(
			@Value("${jdbc.database.driver}") String driver,
			@Value("${jdbc.database.url}") String url,
			@Value("${jdbc.database.username}") String username, 
			@Value("${jdbc.database.password}") String password) {
		Properties props = new Properties();
		props.setProperty("driver", driver);
		props.setProperty("url", url);
		props.setProperty("username", username);
		props.setProperty("password", password);
		DataSource dataSource = null;
		try {
			dataSource = BasicDataSourceFactory.createDataSource(props);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dataSource;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值