org.springframework.beans.factory.annotation

## 类 InitDestroyAnnotationBeanPostProcessor

- java.lang.Object
- - org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor

- 所有已实现的接口:
    Serializable, BeanPostProcessor, DestructionAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, org.springframework.core.Ordered, org.springframework.core.PriorityOrdered

      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.

  从以下版本开始:
    2.5
  作者:
    Juergen Hoeller
  另请参阅:
    `setInitAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>)`, `setDestroyAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>)`, 序列化表格

- - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected Log` | `logger`

    - ### 从接口继承的字段 org.springframework.core.Ordered

      `HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

  - ### 构造器概要

    构造器
    构造器和说明
    `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)`

    - ### 从类继承的方法 java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 字段详细资料

    - #### logger

          protected transient Log logger

  - ### 构造器详细资料

    - #### InitDestroyAnnotationBeanPostProcessor

          public InitDestroyAnnotationBeanPostProcessor()

  - ### 方法详细资料

    - #### setInitAnnotationType

          public void setInitAnnotationType(Class<? extends Annotation> initAnnotationType)

      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 JSR-250 `PostConstruct` annotation.

    - #### setDestroyAnnotationType

          public void setDestroyAnnotationType(Class<? extends Annotation> destroyAnnotationType)

      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 JSR-250 `PreDestroy` annotation.

    - #### setOrder

          public void setOrder(int order)

    - #### getOrder

          public int getOrder()

      指定者:
        `getOrder` 在接口中 `org.springframework.core.Ordered`

    - #### postProcessMergedBeanDefinition

          public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition,
                                                      Class<?> beanType,
                                                      String beanName)

      从接口复制的说明: `MergedBeanDefinitionPostProcessor`
      Post-process the given merged bean definition for the specified bean.
      指定者:
        `postProcessMergedBeanDefinition` 在接口中 `MergedBeanDefinitionPostProcessor`
      参数:
        `beanDefinition` - the merged bean definition for the bean
        `beanType` - the actual type of the managed bean instance
        `beanName` - the name of the bean

    - #### postProcessBeforeInitialization

          public Object postProcessBeforeInitialization(Object bean,
                                                        String beanName)
                                                 throws BeansException

      从接口复制的说明: `BeanPostProcessor`
      Apply this BeanPostProcessor to the given new bean instance before any bean initialization callbacks (like InitializingBean's `afterPropertiesSet` 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` 在接口中 `BeanPostProcessor`
      参数:
        `bean` - the new bean instance
        `beanName` - the name of the bean
      返回:
        the bean instance to use, either the original or a wrapped one; if `null`, no subsequent BeanPostProcessors will be invoked
      抛出:
        `BeansException` - in case of errors
      另请参阅:
        `InitializingBean.afterPropertiesSet()`

    - #### postProcessAfterInitialization

          public Object postProcessAfterInitialization(Object bean,
                                                       String beanName)
                                                throws BeansException

      从接口复制的说明: `BeanPostProcessor`
      Apply this BeanPostProcessor to the given new bean instance after any bean initialization callbacks (like InitializingBean's `afterPropertiesSet` 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` 在接口中 `BeanPostProcessor`
      参数:
        `bean` - the new bean instance
        `beanName` - the name of the bean
      返回:
        the bean instance to use, either the original or a wrapped one; if `null`, no subsequent BeanPostProcessors will be invoked
      抛出:
        `BeansException` - in case of errors
      另请参阅:
        `InitializingBean.afterPropertiesSet()`, `FactoryBean`

    - #### postProcessBeforeDestruction

          public void postProcessBeforeDestruction(Object bean,
                                                   String beanName)
                                            throws BeansException

      从接口复制的说明: `DestructionAwareBeanPostProcessor`
      Apply this BeanPostProcessor to the given bean instance before its destruction, e.g. 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.

      指定者:
        `postProcessBeforeDestruction` 在接口中 `DestructionAwareBeanPostProcessor`
      参数:
        `bean` - the bean instance to be destroyed
        `beanName` - the name of the bean
      抛出:
        `BeansException` - in case of errors
      另请参阅:
        `DisposableBean.destroy()`, `AbstractBeanDefinition.setDestroyMethodName(String)`

    - #### requiresDestruction

          public boolean requiresDestruction(Object bean)

      从接口复制的说明: `DestructionAwareBeanPostProcessor`
      Determine whether the given bean instance requires destruction by this post-processor.

      The 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` 在接口中 `DestructionAwareBeanPostProcessor`
      参数:
        `bean` - the bean instance to check
      返回:
        `true` if `DestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String)` is supposed to be called for this bean instance eventually, or `false` if not needed