条件化创建Bean

前言

Spring 4提供了@Conditional,用来根据条件创建Bean,具体用法如下:

开始

首先,自定义条件类BusServiceExistsCondition,该类是判断如果上下文中存在名为payBusService的Bean,则返回false。

package com.asiainfo.aigov.plugins.pay;

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

public class BusServiceExistsCondition implements Condition {
    
    static final String BUS_SERVICE_BEAN_NAME = "payBusService";

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return !context.getBeanFactory().containsBean(BUS_SERVICE_BEAN_NAME);
    }

}

然后,在配置类BusServiceConfig中,如果该条件判断为true,则实例化一个名为payBusService的Bean。

package com.asiainfo.aigov.plugins.pay;

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

import com.asiainfo.aigov.plugins.pay.service.BusService;
import com.asiainfo.aigov.plugins.pay.service.IBusService;

@Configuration
public class BusServiceConfig {

    @Conditional(BusServiceExistsCondition.class)
    @Bean(name=BusServiceExistsCondition.BUS_SERVICE_BEAN_NAME)
    public IBusService busService() {
        return new BusService();
    }
    
}

这样的话,在你提供了默认的实现之后,也可以通过定义一个实现类,名为payBusService,来覆盖默认的实现。

结后语

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。