BeanPostProcessor:
如果我们想在SpringIOC容器完成初始化之前和初始化之后完成逻辑性质的单个或多个处理,就可以实现BeanPostProcess接口,并将其注册到Spring的IOC容器中,即可使用。
先写一个简单的Spring要实例化的对象,并将其注册到IOC容器中。
@Service
public class BalenceService implements Runnable{
private Map<String, Object> balence;
@Override
public void run() {
balence = new HashMap<String, Object>();
int i = 0;
while(true) {
i++;
balence.put(String.valueOf(i), UUID.randomUUID());
System.out.println(String.valueOf(i) + ":" + balence.get(String.valueOf(i)));
}
}
}
再实现一个BeanPostProcessor的对象,并注册到IOC
@Service
public class BeanPostProcessFactory implements BeanPostProcessor{
private Map<String, Runnable> map = new ConcurrentHashMap<>();
@Override
public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("返回bean:After" + arg1 + " : " + arg0.getClass().getName());
if(arg0 instanceof Runnable) {//逻辑处理
System.out.println("放入map里");
map.put(arg1, (Runnable) arg0);
}
return arg0;
}
@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("返回bean:Before" + arg1 + " : " + arg0.getClass().getName());
return arg0;
}
}