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 SummaryFieldsFields inherited from interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessorIGNORE_REGISTRATION_ATTRIBUTEFields inherited from interface org.springframework.core.OrderedHIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddDestroyAnnotationType(Class<? extends Annotation> destroyAnnotationType) Add a destroy annotation to check for, indicating destruction methods to call when the context is shutting down.voidaddInitAnnotationType(Class<? extends Annotation> initAnnotationType) Add an init annotation to check for, indicating initialization methods to call after configuration of a bean.intgetOrder()Get the order value of this object.postProcessAfterInitialization(Object bean, String beanName) Apply thisBeanPostProcessorto the given new bean instance after any bean initialization callbacks (like InitializingBean'safterPropertiesSetor a custom init-method).voidpostProcessBeforeDestruction(Object bean, String beanName) Apply this BeanPostProcessor to the given bean instance before its destruction, e.g.postProcessBeforeInitialization(Object bean, String beanName) Apply thisBeanPostProcessorto the given new bean instance before any bean initialization callbacks (like InitializingBean'safterPropertiesSetor a custom init-method).voidpostProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanClass, String beanName) Post-process the given merged bean definition for the specified bean.processAheadOfTime(RegisteredBean registeredBean) Process the givenRegisteredBeaninstance ahead-of-time and return a contribution ornull.booleanrequiresDestruction(Object bean) Determine whether the given bean instance requires destruction by this post-processor.voidsetDestroyAnnotationType(Class<? extends Annotation> destroyAnnotationType) Specify the destroy annotation to check for, indicating destruction methods to call when the context is shutting down.voidsetInitAnnotationType(Class<? extends Annotation> initAnnotationType) Specify the init annotation to check for, indicating initialization methods to call after configuration of a bean.voidsetOrder(int order) Methods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessorisBeanExcludedFromAotProcessingMethods inherited from interface org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessorresetBeanDefinition
- 
Field Details- 
logger
 
- 
- 
Constructor Details- 
InitDestroyAnnotationBeanPostProcessorpublic InitDestroyAnnotationBeanPostProcessor()
 
- 
- 
Method Details- 
setInitAnnotationTypeSpecify 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 PostConstructannotation.
- 
addInitAnnotationTypeAdd an init annotation to check for, indicating initialization methods to call after configuration of a bean.- Since:
- 6.0.11
- See Also:
 
- 
setDestroyAnnotationTypeSpecify 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 PreDestroyannotation.
- 
addDestroyAnnotationTypeAdd a destroy annotation to check for, indicating destruction methods to call when the context is shutting down.- Since:
- 6.0.11
- See Also:
 
- 
setOrderpublic void setOrder(int order) 
- 
getOrderpublic int getOrder()Description copied from interface:OrderedGet 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-startupvalues).Same order values will result in arbitrary sort positions for the affected objects. 
- 
postProcessMergedBeanDefinitionpublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanClass, String beanName) Description copied from interface:MergedBeanDefinitionPostProcessorPost-process the given merged bean definition for the specified bean.- Specified by:
- postProcessMergedBeanDefinitionin interface- MergedBeanDefinitionPostProcessor
- Parameters:
- beanDefinition- the merged bean definition for the bean
- beanClass- the actual type of the managed bean instance
- beanName- the name of the bean
- See Also:
 
- 
processAheadOfTimeDescription copied from interface:BeanRegistrationAotProcessorProcess the givenRegisteredBeaninstance 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 nullcontribution.- Specified by:
- processAheadOfTimein interface- BeanRegistrationAotProcessor
- Parameters:
- registeredBean- the registered bean to process
- Returns:
- a BeanRegistrationAotContributionornull
 
- 
postProcessBeforeInitializationDescription copied from interface:BeanPostProcessorApply thisBeanPostProcessorto the given new bean instance before any bean initialization callbacks (like InitializingBean'safterPropertiesSetor 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 beanas-is.- Specified by:
- postProcessBeforeInitializationin interface- BeanPostProcessor
- Parameters:
- bean- the new bean instance
- beanName- 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:
 
- 
postProcessAfterInitializationDescription copied from interface:BeanPostProcessorApply thisBeanPostProcessorto the given new bean instance after any bean initialization callbacks (like InitializingBean'safterPropertiesSetor 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 FactoryBeanchecks.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 otherBeanPostProcessorcallbacks.The default implementation returns the given beanas-is.- Specified by:
- postProcessAfterInitializationin interface- BeanPostProcessor
- Parameters:
- bean- the new bean instance
- beanName- 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:
 
- 
postProcessBeforeDestructionDescription copied from interface:DestructionAwareBeanPostProcessorApply this BeanPostProcessor to the given bean instance before its destruction, e.g. invoking custom destruction callbacks.Like DisposableBean's destroyand 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:
- postProcessBeforeDestructionin interface- DestructionAwareBeanPostProcessor
- Parameters:
- bean- the bean instance to be destroyed
- beanName- the name of the bean
- Throws:
- BeansException- in case of errors
- See Also:
 
- 
requiresDestructionDescription copied from interface:DestructionAwareBeanPostProcessorDetermine whether the given bean instance requires destruction by this post-processor.The default implementation returns true. If a pre-5 implementation ofDestructionAwareBeanPostProcessordoes not provide a concrete implementation of this method, Spring silently assumestrueas well.- Specified by:
- requiresDestructionin interface- DestructionAwareBeanPostProcessor
- Parameters:
- bean- the bean instance to check
- Returns:
- trueif- DestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String)is supposed to be called for this bean instance eventually, or- falseif not needed
 
 
-