2011-10-19 9 views
0

プロパティファイルがSpring ApplicationContextで使用されている場合、そのプロパティには次のようにアクセスできます。$ {someproperty} xml設定ファイル内。しかし、あなたはどのようにxmlを介してそれを注入せずにあなたのJavaコード内の同じプロパティにアクセスしますか?ApplicationContext経由でプロパティにアクセスするにはどうすればいいですか

ApplicationContextのコンフィグ

<?xml version="1.0" encoding="UTF-8" ?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="myapp.properties" /> 
    </bean> 
    <bean class="my.app.MyClass"> 
     <property name="foo" value="${someproperty}" /> 
    </bean> 
</beans>

プロパティ

someproperty=somevalue

更新1
本の実際のポイントは、アプリケーションの一意のIDである特殊なケースでありますプロパティファイル(sysadminによる編集)で設定します。アプリケーションクラスのいくつかは、コンテキストにアクセスできるようにApplicationContextAwareを実装し、ezプロパティアクセスメソッドを必要とするすべてのクラスのBeanを定義するか、各クラスの注入を防止します。この場合、Springに関する「知っている」アプリケーションは問題ではありません。

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyResourceConfigurer.html#convertPropertyValue(java.lang.String

+0

"各クラスの注入を禁止するか、すべてのクラスのBeanを定義しない"を説明できますか? – kan

+0

注釈を使用していない場合は、プロパティ自体にアクセスする必要がある各Beanに対して「property」タグが必要です。それは、クラスからXMLに作品を移動するだけです。 –

+0

私は実際にこのブログ記事のような設定クラスを使うことに傾いています:http://chrislovecnm.com/2010/03/08/spring-3-java-based-configuration-with-value/ –

答えて

3

プロパティにアクセスする意味はありませんそれは春の主な目的であるIoCの原則と矛盾します。他の答えに加えて、あなたはすべてのプロパティが必要な場合がありますか?この場合、すべてのプロパティに対してPropertiesオブジェクトにアクセスできるようにするPropertiesFactoryBeanオブジェクトがあります。

PropertyPlaceholderConfigurer beanは、スプリングコンテキストでプレースホルダを置き換えるように設計されています。その他の用途は、少なくとも混乱するだけです。

0

は、私が(ApplicationContextのまたはそれを注入することによって、例えば)placeHolderConfig Beanをフェッチするだろう、PropertyPlaceholderConfigurerはここを見て、このためのアクセス方法を持っていますできるだけSpringについて知っていますが、(あなたがあなたのBeanの構築方法に応じて)プロパティまたはコンストラクタに置く@Value注釈(Spring 3を使用している場合)を介して注入することができます。そうでなければ、のwebappの設定からそれを選ぶことができますが、私の経験ではかなりエラーが発生しやすくなります。 (Springを使ってそれを行うことについてのもう1つの良い点は、複数の異なるソースのプロパティを複雑なオーバーライドルールでマージするのが簡単だということです)。

+1

それはそうではありません「アクセス方法」。これは、拡張のための保護された可視性を持つ内部メソッドです - このように使用するのは間違いありません。 –

+0

あなたは正しいです、プロテクトされた修飾子を見たことがありません:( – HefferWolf

1

良いスタイルは、あなたのコードを持っています

+0

これは有望に見えます。はい、私たちはSpring 3を使用しています –

関連する問題