ApplicationContext
Spring には BeanFactory を拡張し、多機能化した ApplicationContext が用意されています。ApplicationContext は BeanFactory の有する機能以外に以下の機能を有します。メモリの使用量に厳しい制限がある場合を除き BeanFactory よりも ApplicationContext を使用することが推奨されています。
* i18n を考慮したメッセージへのアクセス
* URL やファイルのようなリソースへのアクセス
* ApplicationListener インタフェースを実装したビーンへのイベントの伝播
* 複数のコンテキストをロード可能ApplicationContext の生成は BeanFactory の生成とほとんど変わりません。以下のようにします。
ApplicationContext appContext = new FileSystemXmlApplicationContext("beans.xml");
BeanFactory の場合と同様クラスパスから Bean 定義ファイルを取得することもできます。
ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");
また BeanFactory とは異なり ApplicationContext では Bean 設定ファイルを複数読み込むことができます。
String[] configs = {"beans-common.xml", "beans-user.xml"}; ApplicationContext context = new ClassPathXmlApplicationContext(configs);
プロジェクトが大きくなってくると、複数Bean設定ファイルに分けたほうがよさそうなんで、この機能は必要そう。
そんなに厳しいメモリ制限があるJavaプロジェクトもなさそうなんで、ほぼこれを使用しているんでしょう。
ためしにBean設定ファイルを分けて実行
編集したソース
・beans.xml(id=manをbeans2.xmlに移動)
・beans2.xml(新規作成)
・main.java いかのように変更
/** * SpringFrameworkTest 2008/07/07 */ package jp.co.jjjjpppp.springtest.impl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Main { /** * @param args */ public static void main(String args) { String config = { "src/configerFiles/beans.xml", "src/configerFiles/beans2.xml" }; ApplicationContext appCon = new FileSystemXmlApplicationContext(config); Man man = (Man) appCon.getBean("man"); man.buyHouse(); } }
beanを使用するためのソースが少なくなっていい感じに。
以下実行結果
2008/07/25 11:30:31 org.springframework.context.support.AbstractApplicationContext prepareRefresh 情報: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@1d6096: display name [org.springframework.context.support.FileSystemXmlApplicationContext@1d6096]; startup date [Fri Jul 25 11:30:31 JST 2008]; root of context hierarchy 2008/07/25 11:30:31 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 情報: Loading XML bean definitions from file [C:\eclipse\workSpace\SpringFrameworkTest\src\configerFiles\beans.xml] 六本木ヒルズを建築します。 ★以下の会社に協力してもらいます。 習志野建設30人2000万 国土交通省4000人20兆円 ★以下のステークスホルダーが存在します。 下請け ★以下の工法で建築します 骨組み重視 2008/07/25 11:30:31 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 情報: Loading XML bean definitions from file [C:\eclipse\workSpace\SpringFrameworkTest\src\configerFiles\beans2.xml] 2008/07/25 11:30:31 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 情報: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@1d6096]: org.springframework.beans.factory.support.DefaultListableBeanFactory@f0eed6 2008/07/25 11:30:31 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 情報: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@f0eed6: defining beans [CC1,CC2,oobayashi,man]; root of factory hierarchy
無事成功。しかし何も設定していないが、標準出力に赤色のログがうざい感じに。ログについては後の課題としよう。