package org.theonefx.wcframework.ioc; import org.theonefx.wcframework.core.ClassWrapper; import org.theonefx.wcframework.core.exception.BeansException; public interface InstantiationBeanPostProcessor extends BeanPostProcessor { /** * @param o * @ClassName : InstantiationBeanPostProcessor * @Author : 陈曦 * @Date : 2012-6-28 上午12:24:20 * @Description : 初始化bean之前可以使用此方法返回一个代理bean,如果这里生成了一个代理对象,那么将会阻止真实对象的生成。<br> * 而且每一个postProcessBeforeInstantiation都会运行,工厂会按顺序执行postProcessBeforeInstantiation。<br> * 第二个参数需要尤其注意,这个对象指的是前面的postProcessBeforeInstantiation生成的对象。<br> * 如果每一个postProcessBeforeInstantiation返回的都是null,那么第二个参数就会一直都是null */ Object postProcessBeforeInstantiation(ClassWrapper<?> wrapper, Object o, String id) throws BeansException; /** * @ClassName : InstantiationBeanPostProcessor * @Author : 陈曦 * @Date : 2013-2-26 上午09:00:17 * @Description : 创建bean对象实例后的植入点,此时的bea存在,但是还没有被注入属性或者调用初始化方法。<br> * 第一个参数bean就是生成的bean对象<br> * 但是如果在这个PostProcesser之前有另一个postProcessAfterInstantiation已经返回了一个代理对象,那么bean将会是上一个postProcessAfterInstantiation返回的代理对象而非真正的原始对象。<br> * 返回值可以是原始对象本身,也可以是一个代理对象 */ Object postProcessAfterInstantiation(String id, RootBeanDefinition mbd, ClassWrapper<?> classWrapper, Object bean) throws BeansException; }