Spring深度解析-12、AOP代理对象创建原理-ProxyFactoryBean

本文深入探讨了Spring AOP代理模式的实现,重点解析了ProxyFactoryBean如何创建AopProxy。文章介绍了Spring获取代理对象的三种方式,并详细讲解了ProxyFactoryBean的配置与使用,包括目标对象、Advisor和通知。接着,通过源码分析展示了ProxyFactoryBean创建代理对象的流程,涉及初始化通知器链和根据不同条件选择JDK或CGLIB代理的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计原理

在这里插入图片描述
大家都知道spring的AOP是通过代理模式实现的,那么AOP中所谓的代理模式在spring源码中是如何实现的呢,实现代理模式实质上就是需要通过一些手段得到目标对象的代理对象,那么在spring中如何得到这些个代理对象呢?
Spring常用的获取代理对象的方式有三种:
1、AspectJProxyFactory:集成spring与Aspect实现AOP
2、ProxyFactory:编程式使用AOP
3、ProxyFactoryBean:声明式使用AOP

这三个类都继承自
ProxyConfig:提供配置属性
AdvisedSupport:封装了通知与通知器
ProxyCreatorSupport:代理对象创建的辅助类

ProxyFactoryBean的配置

对于AOP代理对象的创建实现,我们从ProxyFactoryBean开始深入窥探,在深入理解ProxyFactoryBean创建代理对象之前,有必要先学会ProxyFactoryBean的配置与使用,
需要配置什么东西呢?
1、ProxyFactoryBean
2、Advisor [ 其实就是 Advice+PointCut]
3、target [目标对象]

下面来看一个配置使用的案例:
目标接口

public interface Subject {
    void request();
}

目标增强对象

public class Target implements Subject {
    @Override
    public void request() {
        System.out.println("target request ..");
    }
}

Advice通知:

前置增强
public class TargetBeforeAdvice implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("target before");
    }
}

bean.xml

<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces"><value>com.raycloud.dmj.data.utils.Subject</value></property>
        <property name="target">
            <bean class="com.raycloud.dmj.data.utils.Target"/>
        </property>
        <property name="interceptorNames">
            <list>
                <value>advisor</value>
            </list>
        </prope
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值