天天看點

Spring Container概覽

applicationcontext接口代表了spring ioc container以及負責初始化,配置,組合beans,這些是根據讀取配置檔案(xml或者java注解或者java代碼,你需要在配置檔案中表述建構應用所需要的對象那個,以及它們之間的依賴)進行的。

spring提供了applicationcontext接口的幾個實作。在一個獨立運作的應用中,通常使用classpathxmlapplicationcontext或者filesystemxmlapplicationcontext。xml是定義配置檔案的傳統格式,不過可以提供一點xml注解來的聲明性地啟用對其它配置格式的支援。

在大多數的應用場景下,使用者不需要使用代碼去顯示地初始化一個或更多的spring ioc container。例如一個web 應用的場景,web.xml即可,或者使用spring boot不需要手動配置,隻需要使用生成的main方法中的springapplication.run()。

對于xml配置的檔案,需要在頂層元素<beans>中定義</bean>元素,而在java的配置方式中,需要在注解為@configuration的類中定義注解為@bean的方法。一個bean至少需要一個class資訊。

有一些實作了applicationcontext的類與資源的路徑相關比如classpathxmlapplicationcontext,會在classpath中讀取給定的配置檔案進而執行個體化。

除了直接在執行個體化的時候提供檔案資訊,也可以在xml的配置檔案的頂層元素<beans>下使用< import resourse = "filename">來使一個配置檔案包含另一個配置檔案,當這個配置檔案被加載時,其包含的配置檔案也被加載。</import>這個指令時命名空間自身提供的,其他的命名空間會有其他的指令。

使用url來定位配置檔案時,不建議使用絕對路徑或者使用../跳轉到上級路徑,作為替代可以使用&{pathtobeparsed}占位符。

applicationcontext是一個擁有一個bean和其依賴的注冊機的進階工廠類的接口。使用t getbean(string name, class requiredtype)你可以檢索一個bean的執行個體,例如:

這些實作中最具彈性的變體是genericapplicationcontext,這個實作可以将其他reader類執行個體作為代理來組合,例如:

注意:在執行個體化xmlbeandefinitionreader時使用了context作為構造參數,使其稱為context的一個代理,然後在調用了它的加載配置檔案的方法。

實際上,你并不需要調用這個getbean方法,進而與spring架構解耦合,而依賴的注入将由spring自動進行。