Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作

关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种:

第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

第二种:通过 在xml中定义init-method 和  destory-method方法

第三种: 通过bean实现InitializingBean和 DisposableBean接口

对于初始化方法我们提供一种应用场景:

你的业务要对接A、B、C三个外部系统读取数据,然后呢每一个系统的内部读取实现方式不一样,那么我们可以这样子,定义一个接口,然后有分别A、B、C三个不同的实现类,执行相应业务时候,使用对应的实现来处理,就类似于动态的切换数据源。

上代码:

import com.xj.rtb.ssp.platform.service.IDspAdSpaceRegisterService;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Component
public class Factory implements InitializingBean {

    @Autowired
    private List<Service> serviceList;//注意需要把Service接口的三个实现类已经注入到spring

    private static Map<String, Service> map;
    
    // 通过Factory.getService(id),就可以在map里获取对应的实现类
    public static Service getService(int id){
        return map.get("register"+id);//这个map的key是我注入的三个实现类不同的名称
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        map = new HashMap<String, Service>();
        for (Service service : serviceList) {
            map.put(service.getDspAdSpaceRegisterName(), service);//按照格式把实现类放到这个map里面
        }
    }
}

AbstractRoutingDataSource动态数据源切换也有异曲同工之妙:https://blog.csdn.net/u012881904/article/details/77449710

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值