目录
一、注入
1.1 注入流程图
二、介绍
三、主要方法分析
3.1 主要流程图和步骤:
3.2 源码分析
四、小结
一、注入
1.1 注入流程图
AutowireBeanFactoryObjectPostProcessor 是通过 @EnableWebSecurity 层层注入

具体步骤如下:

二、介绍
AutowireBeanFactoryObjectPostProcessor 实现了 ObjectPostProcessor、DisposableBean, SmartInitializingSingleton 三个接口, 后两个接口都是spring 里面 常用的,用来在销毁、和 Bean 实例化之后的相关操作.

这里有一个参数的构造函数 ,属性类型 是 AutowireCapableBeanFactory. 这个 构造 方法就是在Spring 注入的时候调用

 

private final AutowireCapableBeanFactory autowireBeanFactory;
     AutowireBeanFactoryObjectPostProcessor(
             AutowireCapableBeanFactory autowireBeanFactory) {
         Assert.notNull(autowireBeanFactory, "autowireBeanFactory cannot be null");
         this.autowireBeanFactory = autowireBeanFactory;
     }

三、主要方法分析
3.1 主要流程图和步骤:

其中 initializeBean 里面相关的逻辑可查看 Spring源码解析之-AbstractAutowireCapableBeanFactory#initializeBean详解

3.2 源码分析
这里主要分析一下postProcess 方法:

public <T> T postProcess(T object) {
         if (object == null) {
             return null;
         }
         T result = null;
         try {
             // 这里调用 initializeBean 方法,主要是对 object 进行 属性完善,
             //主要是进行Aware 的各种类型扩展, 
             //BeanPostProcessor 的前置处理
             //InitializingBean 的afterPropertiesSet 调用, 自定义的方法的反射调用
             //BeanPostProcessor 的后置处理
             result = (T) this.autowireBeanFactory.initializeBean(object,
                     object.toString());
         }
         catch (RuntimeException e) {
             Class<?> type = object.getClass();
             throw new RuntimeException(
                     "Could not postProcess " + object + " of type " + type, e);
         }
         // 注入Bean
         this.autowireBeanFactory.autowireBean(object);
         // 如果是 DisposableBean 类型,加入列表
         if (result instanceof DisposableBean) {
             this.disposableBeans.add((DisposableBean) result);
         }
         // 如果是 SmartInitializingSingleton类型,加入列表
         if (result instanceof SmartInitializingSingleton) {
             this.smartSingletons.add((SmartInitializingSingleton) result);
         }
         return result;
     }
 


四、小结
AutowireBeanFactoryObjectPostProcessor 这个 类主要就是 进行注入.