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

目录
一、注入
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;
    }
1
2
3
4
5
6


三、主要方法分析
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;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
四、小结
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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值