org.springframework.beans.factory.config

## 接口 BeanPostProcessor

- 所有已知子接口:
    DestructionAwareBeanPostProcessor, InstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, SmartInstantiationAwareBeanPostProcessor
  所有已知实现类:
    AutowiredAnnotationBeanPostProcessor, InitDestroyAnnotationBeanPostProcessor, InstantiationAwareBeanPostProcessorAdapter, RequiredAnnotationBeanPostProcessor

      public interface BeanPostProcessor

  后置处理器接口,系统默认的有7个名称分别为: 1:ApplicationContextAwareProcessor 直接实现了 BeanPostProcessor 用来直接处理我们的组件是否实现了ApplicationContextAware接口的作用,往我们容器中注册回调ApplicationContext接口 起作用的接口:postProcessBeforeInitialization()方法来进行回调我们的aware接口的 执行时间：我们的Bean进行了调用了构造方法之后，初始化之前 2:CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBeanPostProcessor 用于处理@PostCust @Predestory注解的 implements InstantiationAwareBeanPostProcessor 实例化执行 :用来处理JSR250规范的注解的。。。。。。。。。 3:AutowiredAnnotationBeanPostProcessor extends：InstantiationAwareBeanPostProcessorAdapter implement： MergedBeanDefinitionPostProcessor 用来解析bean之间的@AutoWired注解 4：RequiredAnnotationBeanPostProcessor 处理reqireud属性的 extends：InstantiationAwareBeanPostProcessorAdapter implement： MergedBeanDefinitionPostProcessor 用来解析bean之间的@AutoWired注解

- - ### 方法概要

    所有方法 实例方法 默认方法
    限定符和类型 | 方法和说明
    --- | ---
    `default 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).
    `default 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).

- - ### 方法详细资料

    - #### postProcessBeforeInitialization

          @Nullable
          default Object postProcessBeforeInitialization(Object bean,
                                                                    String beanName)
                                                             throws BeansException

      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.

      参数:
        `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

          @Nullable
          default Object postProcessAfterInitialization(Object bean,
                                                                   String beanName)
                                                            throws BeansException

      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.

      参数:
        `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`