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;
}