Spring源码之浅读BeanPostProcessor执行流程

bean 的后置处理器:在所有 bean 初始化前后进行一些处理工作

一、环境搭建

  1. 创建一个maven项目,引入5.x版本的spring依赖
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.24</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.3.24</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.24</version>
        </dependency>
    </dependencies>
  1. 编写代码
  • 重写后置类处理器:自定义处理时的操作

CustomBeanPostProcessor

@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 非自定义bean,直接返回
        if (!(bean instanceof Person)) {
            return bean;
        } else {
            // 自定义,打印日志
            System.out.println("bean 初始化前\t" + beanName);
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // 非自定义bean,直接返回
        if (!(bean instanceof Person)) {
            return bean;
        } else {
            // 自定义,打印日志
            System.out.println("bean 初始化后\t" + beanName);
        }
        return bean;
    }
}
  • 编写配置类:将指定类加入ioc容器
    MainConfig
@ComponentScan({"com.k3wd.springtest"})
@Configuration
public class MainConfig {
}
  • 编写测试的bean
    Person
@Component
public class Person {
}
  • 测试主类
    Test
public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
        Object person = context.getBean("person");
    }
}

二、跟踪调试

打上断点,开始调试

可以看到主线程中入栈的方法并不多。可以一个一个点过去看看,这也是一种阅读源码的好方法:以目的为导向阅读。

前面感兴趣的可以自己读下,我们关注本次的核心

后置处理工作发生在装配之后,初始化之前

可以看到,初始化之前和之后都有调用

三、Spring中的使用

spring中有大量例子
这里举例@AutoWired

注册外部托管的配置方法或字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值