Class InitDestroyAnnotationBeanPostProcessor
- All Implemented Interfaces:
Serializable
,BeanRegistrationAotProcessor
,BeanPostProcessor
,DestructionAwareBeanPostProcessor
,MergedBeanDefinitionPostProcessor
,Ordered
,PriorityOrdered
- Direct Known Subclasses:
CommonAnnotationBeanPostProcessor
BeanPostProcessor
implementation
that invokes annotated init and destroy methods. Allows for an annotation
alternative to Spring's InitializingBean
and DisposableBean
callback interfaces.
The actual annotation types that this post-processor checks for can be
configured through the "initAnnotationType"
and "destroyAnnotationType"
properties.
Any custom annotation can be used, since there are no required annotation
attributes.
Init and destroy annotations may be applied to methods of any visibility: public, package-protected, protected, or private. Multiple such methods may be annotated, but it is recommended to only annotate one single init method and destroy method, respectively.
Spring's CommonAnnotationBeanPostProcessor
supports the PostConstruct
and PreDestroy
annotations out of the box, as init annotation and destroy annotation, respectively.
Furthermore, it also supports the Resource
annotation
for annotation-driven injection of named beans.
- Since:
- 2.5
- Author:
- Juergen Hoeller, Stephane Nicoll, Phillip Webb, Sam Brannen
- See Also:
-
Field Summary
Fields inherited from interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessor
IGNORE_REGISTRATION_ATTRIBUTE
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addDestroyAnnotationType
(Class<? extends Annotation> destroyAnnotationType) Add a destroy annotation to check for, indicating destruction methods to call when the context is shutting down.void
addInitAnnotationType
(Class<? extends Annotation> initAnnotationType) Add an init annotation to check for, indicating initialization methods to call after configuration of a bean.int
getOrder()
Get the order value of this object.postProcessAfterInitialization
(Object bean, String beanName) Apply thisBeanPostProcessor
to the given new bean instance after any bean initialization callbacks (like InitializingBean'safterPropertiesSet
or a custom init-method).void
postProcessBeforeDestruction
(Object bean, String beanName) Apply this BeanPostProcessor to the given bean instance before its destruction, for example, invoking custom destruction callbacks.postProcessBeforeInitialization
(Object bean, String beanName) Apply thisBeanPostProcessor
to the given new bean instance before any bean initialization callbacks (like InitializingBean'safterPropertiesSet
or a custom init-method).void
postProcessMergedBeanDefinition
(RootBeanDefinition beanDefinition, Class<?> beanClass, String beanName) Post-process the given merged bean definition for the specified bean.processAheadOfTime
(RegisteredBean registeredBean) Process the givenRegisteredBean
instance ahead-of-time and return a contribution ornull
.boolean
requiresDestruction
(Object bean) Determine whether the given bean instance requires destruction by this post-processor.void
setDestroyAnnotationType
(Class<? extends Annotation> destroyAnnotationType) Specify the destroy annotation to check for, indicating destruction methods to call when the context is shutting down.void
setInitAnnotationType
(Class<? extends Annotation> initAnnotationType) Specify the init annotation to check for, indicating initialization methods to call after configuration of a bean.void
setOrder
(int order) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessor
isBeanExcludedFromAotProcessing
Methods inherited from interface org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor
resetBeanDefinition
-
Field Details
-
logger
-
-
Constructor Details
-
InitDestroyAnnotationBeanPostProcessor
public InitDestroyAnnotationBeanPostProcessor()
-
-
Method Details
-
setInitAnnotationType
Specify the init annotation to check for, indicating initialization methods to call after configuration of a bean.Any custom annotation can be used, since there are no required annotation attributes. There is no default, although a typical choice is the
PostConstruct
annotation. -
addInitAnnotationType
Add an init annotation to check for, indicating initialization methods to call after configuration of a bean.- Since:
- 6.0.11
- See Also:
-
setDestroyAnnotationType
Specify the destroy annotation to check for, indicating destruction methods to call when the context is shutting down.Any custom annotation can be used, since there are no required annotation attributes. There is no default, although a typical choice is the
PreDestroy
annotation. -
addDestroyAnnotationType
Add a destroy annotation to check for, indicating destruction methods to call when the context is shutting down.- Since:
- 6.0.11
- See Also:
-
setOrder
public void setOrder(int order) -
getOrder
public int getOrder()Description copied from interface:Ordered
Get the order value of this object.Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet
load-on-startup
values).Same order values will result in arbitrary sort positions for the affected objects.
-
postProcessMergedBeanDefinition
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanClass, String beanName) Description copied from interface:MergedBeanDefinitionPostProcessor
Post-process the given merged bean definition for the specified bean.- Specified by:
postProcessMergedBeanDefinition
in interfaceMergedBeanDefinitionPostProcessor
- Parameters:
beanDefinition
- the merged bean definition for the beanbeanClass
- the actual type of the managed bean instancebeanName
- the name of the bean- See Also:
-
processAheadOfTime
Description copied from interface:BeanRegistrationAotProcessor
Process the givenRegisteredBean
instance ahead-of-time and return a contribution ornull
.Processors are free to use any techniques they like to analyze the given instance. Most typically use reflection to find fields or methods to use in the contribution. Contributions typically generate source code or resource files that can be used when the AOT optimized application runs.
If the given instance isn't relevant to the processor, it should return a
null
contribution.- Specified by:
processAheadOfTime
in interfaceBeanRegistrationAotProcessor
- Parameters:
registeredBean
- the registered bean to process- Returns:
- a
BeanRegistrationAotContribution
ornull
-
postProcessBeforeInitialization
Description copied from interface:BeanPostProcessor
Apply thisBeanPostProcessor
to the given new bean instance before any bean initialization callbacks (like InitializingBean'safterPropertiesSet
or a custom init-method). The bean will already be populated with property values. The returned bean instance may be a wrapper around the original.The default implementation returns the given
bean
as-is.- Specified by:
postProcessBeforeInitialization
in interfaceBeanPostProcessor
- Parameters:
bean
- the new bean instancebeanName
- the name of the bean- Returns:
- the bean instance to use, either the original or a wrapped one;
if
null
, no subsequent BeanPostProcessors will be invoked - Throws:
BeansException
- in case of errors- See Also:
-
postProcessAfterInitialization
Description copied from interface:BeanPostProcessor
Apply thisBeanPostProcessor
to the given new bean instance after any bean initialization callbacks (like InitializingBean'safterPropertiesSet
or a custom init-method). The bean will already be populated with property values. The returned bean instance may be a wrapper around the original.In case of a FactoryBean, this callback will be invoked for both the FactoryBean instance and the objects created by the FactoryBean (as of Spring 2.0). The post-processor can decide whether to apply to either the FactoryBean or created objects or both through corresponding
bean instanceof FactoryBean
checks.This callback will also be invoked after a short-circuiting triggered by a
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
method, in contrast to all otherBeanPostProcessor
callbacks.The default implementation returns the given
bean
as-is.- Specified by:
postProcessAfterInitialization
in interfaceBeanPostProcessor
- Parameters:
bean
- the new bean instancebeanName
- the name of the bean- Returns:
- the bean instance to use, either the original or a wrapped one;
if
null
, no subsequent BeanPostProcessors will be invoked - Throws:
BeansException
- in case of errors- See Also:
-
postProcessBeforeDestruction
Description copied from interface:DestructionAwareBeanPostProcessor
Apply this BeanPostProcessor to the given bean instance before its destruction, for example, invoking custom destruction callbacks.Like DisposableBean's
destroy
and a custom destroy method, this callback will only apply to beans which the container fully manages the lifecycle for. This is usually the case for singletons and scoped beans.- Specified by:
postProcessBeforeDestruction
in interfaceDestructionAwareBeanPostProcessor
- Parameters:
bean
- the bean instance to be destroyedbeanName
- the name of the bean- Throws:
BeansException
- in case of errors- See Also:
-
requiresDestruction
Description copied from interface:DestructionAwareBeanPostProcessor
Determine whether the given bean instance requires destruction by this post-processor.The default implementation returns
true
. If a pre-5 implementation ofDestructionAwareBeanPostProcessor
does not provide a concrete implementation of this method, Spring silently assumestrue
as well.- Specified by:
requiresDestruction
in interfaceDestructionAwareBeanPostProcessor
- Parameters:
bean
- the bean instance to check- Returns:
true
ifDestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String)
is supposed to be called for this bean instance eventually, orfalse
if not needed
-