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

时间:2015-10-05 14:34:30

标签: java spring spring-web

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

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

由于您要执行清理任务,因此您应该在bean的方法中使用@PreDestroy

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

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