How to tie the Lifecycle for a Spring Bean to the webapps' lifecycle?
Solution 1
You can either annotate your start()
and stop()
methods as you describe, or you can tell Spring to invoke them explicitly, e.g.
<bean class="MyClass" init-method="start" destroy-method="stop"/>
As for the ServletContextListener
, it would not have easy access to the Spring context. It's best to use Spring's own lifecycle to do your bean initialization.
Solution 2
Implement the Lifecycle or SmartLifecycle interfaces in your bean, as described in
public interface Lifecycle {
void start();
void stop();
boolean isRunning();
}
Your ApplicationContext will then cascade its start and stop events to all Lifecycle implementations. See also the JavaDocs:
Comments
-
Daniel almost 2 years
I want to create a bean that has
start()
andstop()
methods. When the webapp's context is active,start()
is called during Spring's runtime bootup. When the webapp is undeployed or stopped, thestop()
method is invoked.Is this correct: I annotate my
start()
method with@PostConstruct
and thestop()
method with@PreDestroy
?Normally in the servlet world, I write a ServletContextListener. Would I be able to access the ApplicationContext from the ServletContextListener ?