如何将 ServletContextListener 添加到现有的@Service?

How to add ServletContextListener to existing @Service?

我有一个现有的 class,我想添加 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 关闭时清理此特定服务中的一些资源。

这里有什么问题?

既然你想执行清理任务,那么你应该在你的bean的方法中使用@PreDestroy

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

Spring 应用程序上下文将在 bean 从上下文中销毁之前执行清理任务。