詳解Spring的生命周期


Spring動態代理創建對象過程可分為以下四個步驟:

1)通過實現InvocationHandler接口創建自己的調用處理器 IvocationHandler handler = new InvocationHandlerImpl(...);

2)通過為Proxy類指定ClassLoader對象和一組interface創建動態代理類

Class clazz = Proxy.getProxyClass(classLoader,new Class[]{...});

3)通過反射機制獲取動態代理類的構造函數,其參數類型是調用處理器接口類型

Constructor constructor = clazz.getConstructor(new Class[]{InvocationHandler.class});

4)通過構造函數創建代理類實例,此時需將調用處理器對象作為參數被傳入

Interface Proxy = (Interface)constructor.newInstance(new Object[] (handler));

為了簡化對象創建過程,Proxy類中的newProxyInstance方法封裝了2~4,只需兩步即可完成代理對象的創建。

生成的ProxySubject繼承Proxy類實現Subject接口,實現的Subject的方法實際調用處理器的invoke方法,而invoke方法利用反射調用的是被代理對象的的方法(Object result=method.invoke(proxied,args))cglib動態代理是生成被代理類的子類,並覆蓋其中方法進行增強。

Spring的生命周期:

1)先實例化Bean工廠后處理器(Bean工廠處理器的實例化是先於bean的實例化的)

2)實例化Bean后處理器(BeanPostProcessor)

3)實例化感知的bean后處理器適配器(
InstantiationAwareBeanPostProcessorAdapter)

4)執行Bean構造器,bean正式實例化

在實例化之前會先去調用
postProcessBeforeInstantiation方法;

在實例化之后就去調用
postProcessAfterInitialization方法;

在這里實例化就是調用postProcessPropertyValues去為所要實例化的bean注入屬性。

5)調用BeanNameAware接口

6)調用BeanFactoryAware接口

7)調用Bean后處理器的
postProcessBeforeInstantiation方法對屬性進行更改

8)調用
InitializingBean.afterPropertiesSet() ,檢查是否已經set所有必要屬性,之后調用的init-method屬性指定的初始化方法

9)調用Bean后處理器的
postProcessAfterInitialization對屬性進行更改

10)調用后處理器適配器的
postProcessAfterInitialization

11)容器初始化成功,使用bean

12)調用DiposibleBean接口的DiposibleBean.destory()

【免責聲明:本文圖片及文字信息均由千鋒重慶Java培訓小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除。】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM