如何将 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 从上下文中销毁之前执行清理任务。
我有一个现有的 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 从上下文中销毁之前执行清理任务。