目录
一、注入
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 这个 类主要就是 进行注入.