一、概述
1、框架:通過反射調用Java類的一種方式。
(框架與房子非常類似,使用的用戶寫的程序寫配置文件,就相當於給房子裝修)
如房地產商造房子用戶住,門窗和空調等等內部都是由用戶自己安裝,房子就是框架,用戶需使用此框架,安好門窗等放入到房地產商提供的框架中。
框架和工具類的區別:工具類被用戶類調用,而框架是調用用戶提供的類。
2、框架機器要解決的核心問題:
我們在寫框架(造房子的過程)的時候,調用的類(安裝的門窗等)還未出現,那么,框架無法知道要被調用的類名,所以在程序中無法直接new其某個類的實例對象,而要用反射來做。
3、簡單框架程序的步驟:
1)右擊項目File命名一個配置文件如:config.properties,然后寫入配置信息。如鍵值對:className=java.util.ArrayList,等號右邊的配置鍵,右邊是值。
2)代碼實現,加載此文件:
①將文件讀取到讀取流中,要寫出配置文件的絕對路徑。
如:InputStream is=new FileInputStream(“配置文件”);
②用Properties類的load()方法將流中的數據存入集合。
③關閉流:關閉的是讀取流,因為流中的數據已經加載進內存。
3)通過getProperty()方法獲取className,即配置的值,也就是某個類名。
4)用反射的方式,創建對象newInstance()。
5)執行程序主體功能
用類加載器的方式管理資源和配置文件
二、類加載器
1、簡述:類加載器是將.class的文件加載進內存,也可將普通文件中的信息加載進內存。
spring這些框架加載配置文件
2、文件的加載問題:
1)eclipse會將源程序中的所有.java文件編譯成.class文件,然后放到classPath指定的目錄中去。並且會將非.java文件原封不動的復制到.class指定的目錄中去。在運行的時候,執行的是.class文件。
2)將配置文件放到.class文件目錄中一同打包,類加載器就會一同加載。
3、資源文件的加載:是使用類加載器。
1)由類加載器ClassLoader來加載進內存,即用getClassLoader()方法獲取類加載器,然后用類加載器的getResourceAsStream(String name)方法,將配置文件(資源文件)加載進內存。利用類加載器來加載配置文件,需把配置文件放置的包名一起寫上。這種方式只有讀取功能。
2)Class類也提供getResourceAsStream方法來加載資源文件,其實它內部就是調用了ClassLoader的方法。這時,配置文件是相對類文件的當前目錄的,也就是說用這種方法,配置文件前面可以省略包名。
如:類名.class.getResourceAsStream(“資源文件名”)
4、配置文件的路徑問題:
1)用絕對路徑,通過getRealPath()方法運算出來具體的目錄,而不是內部編碼出來的。
一般先得到用戶自定義的總目錄,在加上自己內部的路徑。可以通過getRealPath()方法獲取文件路徑。對配置文件修改是需要要儲存到配置文件中,那么就要得到它的絕對路徑才行,因此,配置文件要放到程序的內部。
2)name的路徑問題:
①如果配置文件和classPath目錄沒關系,就必須寫上絕對路徑,
②如果配置文件和classPath目錄有關系,即在classPath目錄中或在其子目錄中(一般是資源文件夾resource),那么就得寫相對路徑,因為它自己了解自己屬於哪個包,是相對於當前包而言的。
示例:
