Spring security源码解析系列04-AutowireBeanFactoryObjectPostProcessor分析

一、注入

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直打铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值