3.4 Spring高级话题: 条件注解@Conditional

3.4 Spring高级话题: 条件注解@Conditional

在这里插入图片描述
3.4 Spring 条件注解

1.Sprin4g提供了更通用的基于条件的Bean的创建->@Conditional
2.@Conditional根据满足一个特定的条件去创建一个Bean
  -> 2.1 比如当一个jar在一个类路径的情况下
  -> 2.2 只有在某个Bean被创建的情况下才会创建Bean

配置过程

1.继承org.springframework.context.annotation.Condition实现matches接口
 -> 去判断是否满足条件 
2.在@Bean后加上@Conditional(参数为自定义的Condition)决定是否实例化Bean
3.获取容器时候会自动注入

1.java配置

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

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

@Configuration
@ComponentScan("com.sgx.inspect.bug.condition")
public class ConditionConfigure {

    @Bean
    @Conditional(MyMacCondition.class)
    public List getMacBean() {
        System.out.println("初始化MacBean");
        List list = new ArrayList();
        list.add("mac");
        return list;
    }

    @Bean
    @Conditional(MyWinCondition.class)
    public List getWinBean() {
        System.out.println("初始化WinBean");
        List list = new LinkedList();
        list.add("mac");
        return list;
    }
}

2.自定义条件

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class MyMacCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return conditionContext.getEnvironment().getProperty("os.name").contains("Mac OS X");
    }
}
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class MyWinCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return conditionContext.getEnvironment().getProperty("os.name").contains("win");
    }
}

3.测试使用

import com.sgx.inspect.bug.condition.ConditionConfigure;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.List;

public class Main3 {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfigure.class);
        List bean = context.getBean(List.class);
        System.out.println("bean:" + bean.get(0));
    }
}

4.mac下输出

初始化MacBean
bean:mac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值