關於在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