Spring IoC的原理為什么是反射而不是new


因為Spring在加載類的實例時,我們知道其實是用工廠的方式,給出一個個實例,而在工廠里面,用了單例,但是真正實例化,則是反射的newInstance來創建對象,而不是new。

那么,為什么是反射的newInstance,而不是new呢?

那么首先我們必須明白,Java里面,反射的目的是什么?

高內聚,低耦合。

進一步,反射比new的好處是什么?

反射不用知道類名,可以直接實例化類,也就是不用硬編碼。

有人問了,不知道類名那怎么反射呢?

例子:

通過new,我們這么寫:

A a = New A();

通過反射,我們這么寫:

Class c = Class.forName(“A”);

factory = (AInterface)c.newInstance();
其中AInterface是類A的接口,如果下面這樣寫,你可能會理解:
String className = “A”;

Class c = Class.forName(className);

factory = (AInterface)c.newInstance();
進一步,如果下面寫,你可能會理解:
String className = readfromXMlConfig;//從xml 配置文件中獲得字符串

Class c = Class.forName(className);

factory = (AInterface)c.newInstance();
上面代碼就消滅了A類名稱,優點:無論A類怎么變化,上述代碼不變,甚至可以更換A的兄弟類B , C , D….等,只要他們繼承Ainterface就可以。

所以可以總結個答案:

反射可以不用類名實例化對象,並且降低耦合,避免了硬編碼。


免責聲明!

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



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