public interface SmartLifecycle extends Lifecycle, Phased
Lifecycle
interface for those objects that require to
be started upon ApplicationContext refresh and/or shutdown in a particular order.
The isAutoStartup()
return value indicates whether this object should
be started at the time of a context refresh. The callback-accepting
stop(Runnable)
method is useful for objects that have an asynchronous
shutdown process. Any implementation of this interface must invoke the
callback's run()
method upon shutdown completion to avoid unnecessary
delays in the overall ApplicationContext shutdown.
This interface extends Phased
, and the Phased.getPhase()
method's
return value indicates the phase within which this Lifecycle component should
be started and stopped. The startup process begins with the lowest phase
value and ends with the highest phase value (Integer.MIN_VALUE
is the lowest possible, and Integer.MAX_VALUE
is the highest possible).
The shutdown process will apply the reverse order. Any components with the
same value will be arbitrarily ordered within the same phase.
Example: if component B depends on component A having already started, then component A should have a lower phase value than component B. During the shutdown process, component B would be stopped before component A.
Any explicit "depends-on" relationship will take precedence over the phase order such that the dependent bean always starts after its dependency and always stops before its dependency.
Any Lifecycle
components within the context that do not also
implement SmartLifecycle
will be treated as if they have a phase
value of 0. That way a SmartLifecycle
implementation may start
before those Lifecycle
components if it has a negative phase value,
or it may start after those components if it has a positive phase value.
Note that, due to the auto-startup support in SmartLifecycle
, a
SmartLifecycle
bean instance will usually get initialized on startup
of the application context in any case. As a consequence, the bean definition
lazy-init flag has very limited actual effect on SmartLifecycle
beans.
LifecycleProcessor
,
ConfigurableApplicationContext
Modifier and Type | Method and Description |
---|---|
boolean |
isAutoStartup()
Returns
true if this Lifecycle component should get
started automatically by the container at the time that the containing
ApplicationContext gets refreshed. |
void |
stop(java.lang.Runnable callback)
Indicates that a Lifecycle component must stop if it is currently running.
|
boolean isAutoStartup()
true
if this Lifecycle
component should get
started automatically by the container at the time that the containing
ApplicationContext
gets refreshed.
A value of false
indicates that the component is intended to
be started through an explicit Lifecycle.start()
call instead, analogous
to a plain Lifecycle
implementation.
void stop(java.lang.Runnable callback)
The provided callback is used by the LifecycleProcessor
to support
an ordered, and potentially concurrent, shutdown of all components having a
common shutdown order value. The callback must be executed after
the SmartLifecycle
component does indeed stop.
The LifecycleProcessor
will call only this variant of the
stop
method; i.e. Lifecycle.stop()
will not be called for
SmartLifecycle
implementations unless explicitly delegated to within
the implementation of this method.
Lifecycle.stop()
,
Phased.getPhase()