ファイヤープロジェクト
PropertyOverwrideConfigurerを使ってみる(Spring1.2.1)
2005-07-17T12:00+09:00   matsu
PropertyOverwrideConfigurerはBeanFactoryPostProcessorの一つである.プロパティファイルの記述により,beans.xmlの設定を上書きすることができる.
さっそくだが,本頁のサンプルのbeans.xmlを以下に示す.
id値sampleBeanFactoryPostProcessor1とsampleBeanFactoryPostProcessor2のbeanは,BeanFactoryPostProcessorの実装クラスPropertyOverrideConfigurerである. これらのbeanには,前頁のPropertyPlaceholderConfigurerと同様,setLocationメソッドがある(※).
public void setLocation(Resource location)
このメソッドによってプロパティファイルを指定する. 上記サンプルでは,id値conf1とconf2で指定されるbean(クラスはorg.springframework.core.io.FileSystemResource)を設定している. 以上の設定により,ApplicationContextは,自動的にsampleBeanFactoryPostProcessor1とsampleBeanFactoryPostProcessor2を検出し,初期化し,postProcessBeanFactoryメソッドを呼び出す.
※ より厳密には親クラスである
org.springframework.core.io.support.PropertiesLoaderSupport
のメソッドである.
PropertyOverrideConfigurerのpostProcessBeanFactoryメソッドは,beans.xmlで設定した各beanの各プロパティの値を上書きする. 先のbeans.xmlでは,sampleBeanFactoryPostProcessor1とsampleBeanFactoryPostProcessor2に,それぞれプロパティファイル./conf/springsample1.confと./conf/springsample2.confを指定した. サンプルの./conf/springsample1.confの内容は以下.
sampleBean.value2=FUGA1
sampleBean.value4=BAR1
sampleBean.value5=100
そして./conf/springsample2.confの内容は以下.
sampleBean.value3=FOO2
sampleBean.value4=BAR2
sampleBean.value5=200
このプロパティファイルの左辺は,Javaのメンバ指定と同様のスタイルである.
オブジェクト.[メンバ.]*メンバ
例えば
hoge.fuga.foo.var=0
は,id値hogeのメンバfugaのメンバfooのメンバvarの値が0に上書きされる. サンプルのように,複数のPropertyOverrideConfigurerを指定することができる. プロパティ指定にて同一の上書き指定があると,最後のPropertyOverrideConfigurerの動作結果が反映される. 上の例だと,
sampleBean.value4
sampleBean.value5
の指定がspringsample1.confとspringsample2.confであるが,beans.xmlでは,springsample2.confを使用するsampleBeanFactoryPostProcessor2の方が後に記述されているので,springsample2.confの値が最終的に使用される.
サンプルのドライバクラスを以下に示す.
id値sampleBeanのbeanを生成するだけである. 最後にサンプルの実行結果を以下に示す.
$> java -jar springsample.jar 
...省略...
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'sampleBeanFactoryPostProcessor1'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'conf1'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'sampleBeanFactoryPostProcessor2'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'conf2'
config.PropertyResourceConfigurer:154
  - Loading properties from file
   [/home/matsu/./conf/springsample1.conf]
config.PropertyResourceConfigurer:154
  - Loading properties from file
   [/home/matsu/./conf/springsample2.conf]
...省略...
support.DefaultListableBeanFactory:262
  - Pre-instantiating singletons in factory
   [org.springframework.beans.factory.xml.XmlBeanFactory defining beans
    [sampleBean,sampleBeanFactoryPostProcessor1,
     sampleBeanFactoryPostProcessor2,conf1,conf2];
   root of BeanFactory hierarchy]
support.AbstractBeanFactory:219 - Creating shared instance of singleton bean 'sampleBean'
springsample.SampleBean:12 - setValue1: param = HOGE
springsample.SampleBean:23 - setValue2: param = FUGA1
springsample.SampleBean:34 - setValue3: param = FOO2
springsample.SampleBean:45 - setValue4: param = BAR2
springsample.SampleBean:56 - setValue5: param = 200
springsample.HelloBeanFactory:30 - org.fireproject.springsample.SampleBean
  [valu1 = HOGE / valu2 = FUGA1 / valu3 = FOO2 / valu4 = BAR2 / valu5 = 200]
最後の出力から,value1はbeans.xmlの値そのまま,value2はspringsample1.confで上書き,value3,4,5はspringsample2.confで上書きされていることが分かる.
matsu(C)
Since 2002
Mail to matsu