Spring IOC源码分析

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()

相关推荐