6

私はこのようなクラスを持っています:

    public class Loader implements DisposableBean { 

        Class1 c1;
        Class2 c2;

        Loader(Class c1, Class c2) {
          this.c1 = c1;
          this.c2 = c2; 
    }
    @Override
    public void destroy() throws Exception {
        c1.do();
        c2.do();
    }
}

@Configuration クラスで @Bean として作成されます。

@Bean(autowire = Autowire.BY_NAME, name = "loader")
public Loader getLoader() {
    return new Loader(getC1(), getC2());
}

そして、web.xml のコンテキスト ローダー リスナーを介してインスタンス化されます。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext-loader.xml</param-value>
</context-param>

そのアプリ コンテキストで次の行を使用します。

<context:component-scan base-package="name.of.package.loader.is.in" />

tomcat で war を開始するときにコンストラクターにブレークポイントを配置すると、c1 と c2 の両方が期待どおりに設定されていることを確認できます。ただし、Tomcat をシャットダウンして destroy メソッドに入ると、c1 と c2 の両方が null になるため、NPE がスローされます。これらの値が存在しなくなったのはなぜですか?


ああ、だめだ、もう少し掘り下げるべきだった。私が慣れていないコードのセクションでクリアされていたので、最終的に追跡しました。

4

0 に答える 0