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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章