1、什麼是反射機制
簡單的來講,反射機制指的是程序在運行時可以獲取自身的信息。在java中,只要給定類的名字,
那麼就能夠經過反射機制來得到類的全部信息。
2、哪裏用到反射機制
有些時候,咱們用過一些知識,可是並不知道它的專業術語是什麼,在剛剛學jdbc時用過一行代碼,
Class.forName("com.mysql.jdbc.Driver.class").newInstance();可是那時候只知道那行代碼是生成
驅動對象實例,並不知道它的具體含義。聽了反射機制這節課後,才知道,原來這就是反射,如今不少開
框架都用到反射機制,hibernate、struts都是用反射機制實現的。
3、反射機制的優勢與缺點
爲何要用反射機制?直接建立對象不就能夠了嗎,這就涉及到了動態與靜態的概念,
靜態編譯:在編譯時肯定類型,綁定對象,即經過。
動態編譯:運行時肯定類型,綁定對象。動態編譯最大限度發揮了java的靈活性,體現了多
態的應用,有以下降類之間的藕合性。
一句話,反射機制的優勢就是能夠實現動態建立對象和編譯,體現出很大的靈活性,特別是在J2EE的開發中
它的靈活性就表現的十分明顯。好比,一個大型的軟件,不可能一次就把把它設計的很完美,當這個程序編
譯後,發佈了,當發現須要更新某些功能時,咱們不可能要用戶把之前的卸載,再從新安裝新的版本,假如
這樣的話,這個軟件確定是沒有多少人用的。採用靜態的話,須要把整個程序從新編譯一次才能夠實現功能
的更新,而採用反射機制的話,它就能夠不用卸載,只須要在運行時才動態的建立和編譯,就能夠實現該功
能。
它的缺點是對性能有影響。使用反射基本上是一種解釋操做,咱們能夠告訴JVM,咱們但願作什麼而且它
知足咱們的要求。這類操做老是慢於只直接執行相同的操做。
4、利用反射機制能得到什麼信息
一句話,類中有什麼信息,它就能夠得到什麼信息,不過前提是得知道類的名字,要不就沒有後文了
首先得根據傳入的類的全名來建立Class對象。
Class c=Class.forName("className");註明:className必須爲全名,也就是得包含包名,好比,cn.netjava.pojo.UserInfo;
Object obj=c.newInstance();//建立對象的實例
OK,有了對象就什麼都好辦了,想要什麼信息就有什麼信息了。
得到構造函數的方法
Constructor getConstructor(Class[] params)//根據指定參數得到public構造器html
Constructor[] getConstructors()//得到public的全部構造器java
Constructor getDeclaredConstructor(Class[] params)//根據指定參數得到public和非public的構造器mysql
Constructor[] getDeclaredConstructors()//得到public的全部構造器
得到類方法的方法
Method getMethod(String name, Class[] params),根據方法名,參數類型得到方法sql
Method[] getMethods()//得到全部的public方法數據庫
Method getDeclaredMethod(String name, Class[] params)//根據方法名和參數類型,得到public和非public的方法框架
Method[] getDeclaredMethods()//得到因此的public和非public方法
得到類中屬性的方法
Field getField(String name)//根據變量名獲得相應的public變量函數
Field[] getFields()//得到類中因此public的方法性能
Field getDeclaredField(String name)//根據方法名得到public和非public變量.net
Field[] getDeclaredFields()//得到類中全部的public和非public方法
經常使用的就這些,知道這些,其餘的都好辦……
5、用反射機制能幹什麼事
剛開始在使用jdbc時侯,在編寫訪問數據庫時寫到想吐,有八個表,每一個表都有增刪改查中操做
那時候還不知道有反射機制這個概念,因此就對不一樣的表建立不一樣的dao類,這樣不只開發速率地,並且代碼
冗餘的厲害,最要命的是看着差很少的,而後直接複製修改,因爲容易犯各類低級的錯誤(大小寫啊,多一
個或少一個字母啊……),一個錯誤就可讓你找半天。
有了java反射機制,什麼都好辦了,只須要寫一個dao類,四個方法,增刪改查,傳入不一樣的對象,就OK啦,
無需爲每個表都建立dao類,反射機制會自動幫咱們完成剩下的事情,這就是它的好處。說白了,反射機制就是專門
幫咱們作那些重複的有規則的事情,因此如今不少的自動生成代碼的軟件就是運用反射機制來完成的,只要你按照規則
輸入相關的參數;
來源:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.htmlhibernate