Spring原理:PostProcessor与AOP原理

这篇博客深入探讨了Spring框架中PostProcessor的加载顺序和AOP原理。通过分析`AspectJAutoProxyRegistrar`的注册过程,以及利用断点调试来理解Spring Bean实例的成功加载流程。

前面我们提到了`PostProcessor`,它其实是Spring提供的一种后置处理机制,它可以让我们能够插手Bean、BeanFactory、BeanDefinition的创建过程,相当于进行一个最终的处理,而最后得到的结果(比如Bean实例、Bean定义等)就是经过后置处理器返回的结果,它是整个加载过程的最后一步。

而AOP机制正是通过它来实现的,我们首先来认识一下第一个接口`BeanPostProcessor`,它相当于Bean初始化的一个后置动作,我们可以直接实现此接口

@Component
public class TestBeanProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName);  //打印bean的名称
        return bean;
    }
 
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }
}

我们发现,此接口中包括两个方法,一个是`postProcessAfterInitialization`用于在Bean初始化之后进行处理,还有一个`postProcessBeforeInitialization`用于在Bean初始化之前进行处理,注意这里的初始化不是创建对象,而是调用类的初始化方法,比如:

@Component
public class TestBeanProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("我是之后:"+beanName);
        return bean;   //这里返回的Bean相当于最终的结果了,我们依然能够插手修改,这里返回之后是什么就是什么了
    }
 
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("我是之前:"+beanName);
        return bean;   //这里返回的Bean会交给下一个阶段,也就是初始化方法
    }
}
@Component
public class TestServiceImpl implements TestService{
 
    public TestServiceImpl(){
        System.out.println("我是构造方法");
    }
 
    @PostConstruct
    public void init(){
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值