关于在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