スタンドアロンの Spring アプリケーションを Spring MVC アプリに変換または統合する。
次の構造を持つSpring MVCアプリケーションがあります
myApp
 |- META-INF
 |- WEB-INF
        |-classes
            |-com
                |-controllers
                |-service
        |-lib
           |-UserLibrary.jar
                |-META-INF
                    |-applicationContext.xml
                    |-dbre.xml
                    |-ehcache.xml
                    |-DataSource.xml
                    |-Jpa.xml
                    |-SpringDataJpa.xml
        |-applicationContext.xml
        |-myApp-servlet.xml
Spring MVC は、通常のプロセスに従ってロードされます。つまり、コントローラには@Controllers、サービスには@Serviceなどの注釈が付けられます。
userLibrary.jar以前は、独自の Spring/JPA 構成を持つスタンドアロンの Spring アプリケーションでした。MVC アプリケーションに統合できるように変換されました。独自の構成ファイル (合計で約 7 個)、独自の Hibernate/JPA エンティティ マネージャーなどがあります。
Spring MVC アプリケーションで使用するために、WebApplicationContext の初期化が完了したときに UserLibrary アプリケーションのアプリケーション コンテキストをロードするように、サービス クラスにわずかな変更を加えました。
public class MyAppService implements
        ApplicationListener<ContextRefreshedEvent> {
    protected UserLibraryService service;
        --
        -- several service methods etc
        --
    System.getProperty("username", "userA");
    System.getProperty("password", "userB");    
    @Override
    public void onApplicationEvent(ContextRefreshedEvent arg0) {        
        ApplicationContext context = 
         new ClassPathXmlApplicationContext("META-INF/userLibrary.xml");
        service = context.getBean(UserLibrary.class);
    }
}   
上記のアプローチによりWebApplicationContext、MVC アプリケーション用とApplicationContextUserLibrary アプリケーション用の 2 つのコンテナーが作成されます。上記は正しい/最善の方法ではないと思うので、最善の方法についてアドバイスを求めています。たとえば、2 つではなく 1 つのコンテナーを使用できますか?
アップデート:
これが私が試したことです。MVC アプリケーションのUserLibraryからアプリケーションの構成ファイルをインポートしました。applicationContext.xml
<import resource="classpath:META-INF/applicationContext.xml" />
UserLibraryBean次に、MVC アプリケーションのapplicationContext.xmlファイル (インポート ステートメントを含む同じファイル)に を追加しました。
<bean class="com.service.UserLibraryService"/>
いくつかの質問:
- 更新されたアプローチは 1 つのコンテナーのみを使用しますか、それとも 2 つのコンテナーを引き続き使用しますか?
- UserLibraryService は、初期化中に次のプロパティを読み取ります - System.getProperty("ユーザー名"); System.getProperty("パスワード"); 
私の元の例では、onApplicationEventメソッドで上記の値を設定し、UserLibrayそれらを読み取ることができます。
これらはもう設定されていないように見えるため、UserLibraryアプリケーションからプロパティが設定されていないというエラーが表示されます。Service クラスのコンストラクターでも設定しようとしましたが、まだ設定されていません。
xml ファイルの Bean 定義の一部としてシステム プロパティを設定する方法はありますか? プロパティをサービス オブジェクトで使用できるようにするには、どこでプロパティを設定できますか?
ありがとう