0

ServletContextListenerインターフェイスを追加したい既存のクラスがあります。

@Service
public class MyService {
    //...
}

@Component
public class MyController {
    @Autowired
    private MyService service;
}

これはうまくいきます。しかし、 を追加するとすぐにpublic class MyService implements ServletContextListener、 で次のエラーが発生しMyControllerます。

org.springframework.beans.factory.BeanCreationException: Could not autowire field: private service. No qualifying bean of type [MyService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}.

アプリケーションはTomcat. 私の目標は@Override public void contextDestroyed()、Tomcat のシャットダウン時に、この特定のサービス内のいくつかのリソースをクリーンアップすることです。

ここで何が問題なのですか?

4

1 に答える 1

3

クリーンアップ タスクを実行したいので@PreDestroy、Bean のメソッドで使用する必要があります。

@Service
public class MyService {
    @PreDestroy
    public void cleanUp() {
        //free resources...
    }
}

Spring アプリケーション コンテキストは、Bean がコンテキストから破棄される前にクリーンアップ タスクを実行します。

于 2015-10-05T14:41:07.207 に答える