【Java Web开发学习】Spring4条件化的bean

【Java Web开发学习】Spring4条件化的bean

转载:https://www.cnblogs.com/yangchongxing/p/9071960.html

Spring4引入了@Conditional注解,可以用到带有@Bean注解的地方,若给定的条件计算为true则创建bean,否则bean被忽略

用法:@Conditional(PlayerCondition.class),设置为@Conditional注解的类必须是任意实现了org.springframework.context.annotation.Condition接口的类。该接口只有一个方法

public boolean matches(ConditionContext context, AnnotatedTypeMetadata matadata) {},返回boolean

package cn.ycx.web.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

import cn.ycx.web.model.Painter;
import cn.ycx.web.model.PainterCondition;
import cn.ycx.web.model.Player;
import cn.ycx.web.model.PlayerCondition;
@Configuration
public class TestConfig {
    @Bean
    @Conditional(PlayerCondition.class)
    public Player player() {
        return new Player();
    }
    @Bean
    @Conditional(PainterCondition.class)
    public Painter painter() {
        return new Painter();
    }
}
package cn.ycx.web.model;

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 PlayerCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata matadata) {
        Environment env = context.getEnvironment();return env.containsProperty("CONDITION_PALY");
    }
}
package cn.ycx.web.model;

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 PainterCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata matadata) {
        Environment env = context.getEnvironment();return env.containsProperty("CONDITION_PAINT");
    }
}

环境变量包含CONDITION_PALY就创建PlayerCondition

环境变量设置:

windows系统

spring.CONDITION_PALY=play

ubuntu系统

当前用户

$ vim ~/.bashrc
追加 export CONDITION_PALY=play
$ source ~/.bashrc

所有用户

# vim /etc/profile
追加 export CONDITION_PALY=play
# source /etc/profile
原文地址:https://www.cnblogs.com/yangchongxing/p/9071960.html