configuration和component區別


https://blog.csdn.net/long476964/article/details/80626930

從上面鏈接,可以看到,雖然Component注解也會當做配置類,但是並不會為其生成CGLIB代理Class,所以在生成Driver對象時和生成Car對象時調用car()方法執行了兩次new操作,所以是不同的對象。

 

 

(1)、此處用component,對sSOInterceptor來說,采用自動注入的方式,那么上圖的ssoConfig,userAuthTokenRequest,也會被注入

(2)、此處用component,對sSOInterceptor來說,采用新建的方式,那么上圖的ssoConfig,userAuthTokenRequest,就不會被自動注入,全為空

(3)、此處用configuration,對sSOInterceptor來說,采用新建的方式,那么上圖的ssoConfig,userAuthTokenRequest,也會被自動注入

//(1)在此處的bean,已經實例化成單例了,所以不會再進入到SSOInterceptor類里面進行操作了(此處,實際上應該是對Configuration注解的bean,即使是new,也是同一個對象實例,前提是不設置生命的周期的話)

 

 

總結:對configuration來說,對new新建也會采用cgLib的方式實現注入。通俗點講,就是,對congfiguration來說,即使new,也是同一個實例(如果不設置生命周期,即默認是單例的模式)。對component來說,如果使用new進行實例化,那么此對象中的屬性不會自動注入,如此文章的第(2)條所描述的。

但無論configuration或者component來說,都可以用@Scope控制bean的生命周期

例如:@Scope(value= WebApplicationContext.SCOPE_REQUEST,proxyMode = ScopedProxyMode.TARGET_CLASS)


免責聲明!

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



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