sping学习(2):@Conditional 条件化装配Bean

    xiaoxiao2023-10-21  162

    条件化装配Bean

    在某些条件下,不需要去装配Bean。例如:当配置文件database-config.properties中的配置项不存在时,则不要去创建数据源,因为属性配置不充足会导致创建失败。因此,需要判断属性文件中的配置是否充足才能继续创建Bean。

    条件化装配Bean的实现:Spring提供了注解@Conditional来配置条件化,通过它可以配置一个或者多个类,只是这些类都需要实现接口Condition(org.springframework.context.annotation.Condition).

    示例如下:

    database-config.properties内容:

    jdbc.database.driver=com.mysql.jdbc.Driver jdbc.database.url=jdbc:mysql://localhost:3306/chapter10 jdbc.database.username=root jdbc.database.password=123456

    DataSourceCondition.java源码:

    package com.ssm.chapter10.annotation.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; public class DataSourceCondition implements Condition { @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:

    @Bean(name = "dataSource") @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; }
    最新回复(0)