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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页