晨曦 2010-09-15
1.Spring的IOC功能
ApplicationContext的getBean(String name)方法的最终实现在
AbstractBeanFactory中getBean(String name,Class requiredType,final object args[]) throws BeansException
AbstractBeanFactory中BeanPostProcessors的使用是在其子类AbstractAutoWireCapableBeanFactory中的applyBeanPostProcessorsBeforeInitialization和applyBeanPostProcessorsAfterInitialization方法
CreateBean同样也在AbstractAutoWireCapableBeanFactory中实现。
createBean->doCreateBean->initializeBean.创建Bean的最终操作就在此方法中。
2.Spring的AOP功能
在CreateBean的前后需要执行BeanPostProcessor的postProcessBeforeInitialization()和postProcessAfterInitialization()方法。在BeanPostProcessor的实现类AbstractAutoProxyCreator中对postProcessAfterInitialization()方法的实现中利用ProxyFactory创建代理类并返回。
Spring最终创建代理类的位置是org.springframework.aop.framework.DefaultAopProxyFactory的createAopProxy()。在此方法中确定最终是使用JDKDynamic还是使用Cglib创建代理类。
创建的Trace:
org.springframework.aop.framework.ProxyFactory.getProxy()->Advised.createAopProxy()->
ProxyConfig.getAopProxyFactory()->DefaultAopProxyFactory.createAopProxy()