JAVA中的反射無處不在,不僅在jdk中存在,還在諸如spring,mybatis,設(shè)計(jì)模式等中廣泛使用!

首先要知道的是,JAVA可以算做編譯型語言,大多數(shù)的類,方法都在編譯時(shí)已經(jīng)明確,這顯然不能滿足于我們所有的需求,使用反射就可以在運(yùn)行時(shí)動(dòng)態(tài)加載,通過類可以構(gòu)造對(duì)象,準(zhǔn)確的知道它的屬性,方法等全部信息!
 

如何理解java中的反射?

JAVA中的反射方式有以下幾種:

①Class.forName(“類全路徑”);

②對(duì)象名.getClass

③基本類型的包裝類:Boolean.TYPE,Integer.TYPE等!

反射的作用有:

1,可以在運(yùn)行時(shí)動(dòng)態(tài)獲得對(duì)象,

2,在運(yùn)行時(shí)動(dòng)態(tài)獲取一個(gè)類的構(gòu)造器,方法,變量,注解等!

3,實(shí)現(xiàn)動(dòng)態(tài)代理。

反射的缺點(diǎn):因?yàn)槭窃谶\(yùn)行時(shí)獲取,沒有JAVA的預(yù)編譯,在運(yùn)行時(shí)性能存在問題!

反射的實(shí)際使用場(chǎng)景:

1,spring中實(shí)例化對(duì)象的時(shí)候如果都用new來創(chuàng)建對(duì)象,那將會(huì)十分繁瑣,而且加入新類型的時(shí)候也需要重新new,spring的做法是讓這些所有對(duì)象繼承自beanDefinition,這樣在實(shí)例化的時(shí)候,只要傳入父類和子類類型即可!

2,動(dòng)態(tài)代理:spring aop中的注釋模式就是用了動(dòng)態(tài)代理,比如JdkDynamicAopProxy

如何理解java中的反射?

反射在實(shí)際開發(fā)中也是體現(xiàn)一個(gè)開發(fā)人員水平高低的參考,要讓這種思想深深烙入心里,在實(shí)際開發(fā)中解決很多后期擴(kuò)展困難的問題!