我有一个现有的类,我想添加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 shutdown上清理此特定服务中的一些资源。
这里有什么问题?
答案 0 :(得分:3)
由于您要执行清理任务,因此您应该在bean的方法中使用@PreDestroy
:
@Service
public class MyService {
@PreDestroy
public void cleanUp() {
//free resources...
}
}
Spring应用程序上下文将在从上下文中销毁bean之前执行清理任务。