0

【春新作】

Springが有効になっていて、いくつかのことを行うサービスがあります。このサービスが起動すると、Springアプリケーションコンテキストが読み込まれ、誰もが満足しています。

次に、上記のサービスで使用されるライブラリを作成する必要があります。このライブラリパッケージもSpringifyしたいと思います。では、このライブラリのアプリケーションコンテキストはいつ/どのように初期化されるのでしょうか。困惑している!

多くの人がこれをしたに違いないと思います。ベストプラクティスは何ですか?

私は考えていましたが、ライブラリのエントリポイントインターフェイスの静的ブロックがアプリケーションコンテキストを初期化するのに適切な場所である可能性がありますか?(つまり、initは1回だけ取得されます)

それは正しいアプローチですか?それはうまくいくのでしょうか、それとも私に何かが欠けているのでしょうか?あなたの助けに感謝。

4

2 に答える 2

1

必要な数のアプリケーション コンテキスト xml ファイルを指定できます。Web アプリケーションでライブラリを使用している場合は、

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
    classpath:context1.xml
    classpath:context2.xml
    ...
</param-value>
</context-param>

基本的に、相対パスを指定する必要がありますclasspath:<relativepathofcontextfile>
それがjarファイル内にあり、jarがクラスパスにある場合、上記のものは機能します。

スタンドアローンの場合は、 を使用できますClassPathXmlApplicationContext

public class SomeClass {
    private static final ApplicationContext ac= 
        new ClassPathXmlApplicationContext("classpath:context1.xml");
    public static void main(String[] args) {
        MyIntf bean= (MyIntf) ac.getBean("myBean");
        bean.myMethod();
    }
}
于 2012-08-27T08:35:11.843 に答える
0

いいえ、静的ブロックを使用すると、別のクラスローダーでまだロードされている可能性があるという事実を無視して、Spring コンテキストを強制的にロードします。そのため、ビジネス オブジェクトを取得するファクトリ メソッドを提供することをお勧めします。このメソッドは、コンテキストがまだ読み込まれているかどうかを追跡し、必要に応じてコンテキストを作成します。または、既存のコンテキストを使用します。

また、Service Locator パターンとhttp://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20Providerを確認することをお勧めします。

于 2012-08-27T08:33:56.510 に答える