public class InitDestroyAnnotationBeanPostProcessor extends Object implements DestructionAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, org.springframework.core.PriorityOrdered, Serializable
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 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
supports the JSR-250 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.
setInitAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>),
setDestroyAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>),
序列化表格| 构造器和说明 |
|---|
InitDestroyAnnotationBeanPostProcessor() |
| 限定符和类型 | 方法和说明 |
|---|---|
int |
getOrder() |
Object |
postProcessAfterInitialization(Object bean,
String beanName)
Apply this BeanPostProcessor to the given new bean instance after any bean
initialization callbacks (like InitializingBean's
afterPropertiesSet
or a custom init-method). |
void |
postProcessBeforeDestruction(Object bean,
String beanName)
Apply this BeanPostProcessor to the given bean instance before its
destruction, e.g. invoking custom destruction callbacks.
|
Object |
postProcessBeforeInitialization(Object bean,
String beanName)
Apply this BeanPostProcessor to the given new bean instance before any bean
initialization callbacks (like InitializingBean's
afterPropertiesSet
or a custom init-method). |
void |
postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition,
Class<?> beanType,
String beanName)
Post-process the given merged bean definition for the specified bean.
|
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) |
protected transient Log logger
public void setInitAnnotationType(Class<? extends Annotation> initAnnotationType)
Any custom annotation can be used, since there are no required
annotation attributes. There is no default, although a typical choice
is the JSR-250 PostConstruct annotation.
public void setDestroyAnnotationType(Class<? extends Annotation> destroyAnnotationType)
Any custom annotation can be used, since there are no required
annotation attributes. There is no default, although a typical choice
is the JSR-250 PreDestroy annotation.
public void setOrder(int order)
public int getOrder()
getOrder 在接口中 org.springframework.core.Orderedpublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)
MergedBeanDefinitionPostProcessorpostProcessMergedBeanDefinition 在接口中 MergedBeanDefinitionPostProcessorbeanDefinition - the merged bean definition for the beanbeanType - the actual type of the managed bean instancebeanName - the name of the beanpublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
BeanPostProcessorafterPropertiesSet
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.
postProcessBeforeInitialization 在接口中 BeanPostProcessorbean - the new bean instancebeanName - the name of the beannull, no subsequent BeanPostProcessors will be invokedBeansException - in case of errorsInitializingBean.afterPropertiesSet()public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
BeanPostProcessorafterPropertiesSet
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 other BeanPostProcessor callbacks.
The default implementation returns the given bean as-is.
postProcessAfterInitialization 在接口中 BeanPostProcessorbean - the new bean instancebeanName - the name of the beannull, no subsequent BeanPostProcessors will be invokedBeansException - in case of errorsInitializingBean.afterPropertiesSet(),
FactoryBeanpublic void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException
DestructionAwareBeanPostProcessorLike 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.
postProcessBeforeDestruction 在接口中 DestructionAwareBeanPostProcessorbean - the bean instance to be destroyedbeanName - the name of the beanBeansException - in case of errorsDisposableBean.destroy(),
AbstractBeanDefinition.setDestroyMethodName(String)public boolean requiresDestruction(Object bean)
DestructionAwareBeanPostProcessorThe default implementation returns true. If a pre-5 implementation
of DestructionAwareBeanPostProcessor does not provide a concrete
implementation of this method, Spring silently assumes true as well.
requiresDestruction 在接口中 DestructionAwareBeanPostProcessorbean - the bean instance to checktrue if DestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String) is supposed to
be called for this bean instance eventually, or false if not needed