別のjarを依存関係として使用するSpring管理アプリケーションがあります。これは、プロパティファイルプロパティが依存関係jar(Spring 3/XML)内に埋められない
から注入された値を使用する必要があるSpring管理サービスクラスSpringコンテキストセットアップ
public class SomeClass {
private ServiceFromTheOtherJar serviceFromTheOtherJar;
public SomeClass(ServiceFromTheOtherJar serviceFromTheOtherJar) {
this.serviceFromTheOtherJar = serviceFromTheOtherJar;
}
public void someMethod() {
serviceFromTheOtherJar.call();
...
APPLIC依存ジャーからサービスを呼び出すクラスの主なアプリケーション依存するJAR
public class ServiceFromTheOtherJar {
private String someFieldWeWantToFillFromPropertyFile;
public void setSomeFieldWeWantToFillFromPropertyFile(String someFieldWeWantToFillFromPropertyFile) {
this.someFieldWeWantToFillFromPropertyFile = someFieldWeWantToFillFromPropertyFile;
}
public void call() {
//we would like to use the filled someFieldWeWantToFillFromPropertyFile here
...
でメインアプリ
<bean name="serviceFromTheOtherJar" class="com...ServiceFromTheOtherJar"/>
<bean name="someClass" class="com...SomeClass">
<constructor-arg ref="serviceFromTheOtherJar"/>
</bean>
サービスクラスのationContext.xmlそしてもちろん、我々は依存ジャーの中application.propertiesファイルを持っている、それは我々のプロパティ値が含まれていますsomeFieldWeWantToFillFromPropertyFileに注入したい
これで、依存するjarをメインアプリケーションに依存として追加することができます。メインアプリケーションが実行されているときにSpringのコンテキストが正しく設定され、ServiceFromTheOtherJar.call()メソッドが期待通りに呼び出されます。しかしsomeFieldWeWantToFillFromPropertyFileは、我々はこれまでに試したどんなプロパティファイルから充填されません(例えば@PropertySource({ "application.properties"})などEnvironment.getProperty(...))
制限
私たちは両方のjarファイルでSpring 3のバージョンを持っていますが、これはデプロイメント環境のために残さなければなりません。そのため、Spring 4のソリューションは問題ありません。
上記のように、メインアプリケーションは現在GenericXmlApplicationContextを使用しており、これを変更するとアプリケーションの重要な書き換えを示すように見えます。従って、例えば。それはあなたがapplicationContext.xmlをに次のBeanを追加する必要がプロパティファイルから値を読み取るには、実行して、コンテキストセットアップ時に
ありがとうございます。しかし、それは建築/ swの原則の観点からもOKであるのだろうか?ここでは、メインjarが依存関係jarのプロパティファイルにアクセスし、注入を管理することを意味します。私はそれがすべて依存関係jar内で処理されるアノテーションソリューションを見つけました。独自のConfiguration/ComponentScanファイルを持ち、ServiceクラスはValueを使ってインジェクションを管理します。残念ながら、私は実際のXMLソリューションを理解できませんでした。例えばmain jarは、サービスBeanとプロパティのインジェクションを宣言する依存関係jar自身のXMLコンテキストをインポートできますが、実行中にインジェクションは発生しません。 – hammerfest
サービスBeanのコンテキストとプロパティを読み取るためのその他のBeanを定義することは可能です依存関係jarにある独自のxmlファイル(service-context.xml)に格納します。メインコンテキストを定義するファイルには、 ' 'を含む他のファイルを含めることができます。 –
jaysee
はい、これは前のコメントで試したものの、何らかの理由で働いていないものです。それはコンパイルされ、コンテキストビルドは成功ですが、実行中にプロパティ値が注入されません。 – hammerfest