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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Security 是一个功能强大且广泛使用的安全框架,用于保护 Java 应用程序的身份验证和授权。它提供了一套全面的安全解决方案,包括认证、授权、攻击防护等功能。 Spring Security源码是开源的,可以从官方仓库(https://github.com/spring-projects/spring-security)获取到。在源码中,主要包含以下几个关键模块: 1. 核心模块(Core):提供了基本的认证和授权功能,包括用户身份认证、访问控制等。核心模块的源码位于 `spring-security-core` 包下。 2. Web 模块(Web):提供了与 Web 应用程序集成的相关功能,如基于 URL 的授权、Web 表单登录、记住我功能等。Web 模块的源码位于 `spring-security-web` 包下。 3. 配置模块(Config):提供了基于 Java 配置和 XML 配置的方式来配置 Spring Security。配置模块的源码位于 `spring-security-config` 包下。 4. 测试模块(Test):提供了用于测试 Spring Security 的工具和辅助类。测试模块的源码位于 `spring-security-test` 包下。 在源码中,你可以深入了解 Spring Security 的内部工作原理、各个组件之间的协作关系以及具体的实现细节。可以通过跟踪调试源码,了解每个功能是如何实现的,从而更好地理解和使用 Spring Security。 请注意,Spring Security源码是非常庞大且复杂的,需要一定的时间和精力去深入研究。建议在阅读源码之前,先对 Spring Security 的基本概念和使用方法有一定的了解,这样会更有助于理解源码中的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一直打铁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值