带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理
目录
- 1 基础
- 2 JavaBean属性
- 3 JDK和CGLIB代理
- 总结
工厂 bean 引入了中间层,让它创建不同类型的对象。
在Spring创建 AOP 代理的基本方式是使用 org.springframework.aop.framework.ProxyFactoryBean。这可以完全控制pointcuts、使用的任何通知和他们的顺序。但若不需要这样的控制,也有更简单的选择。
1 基础 ProxyFactoryBean,类似其他 Spring 的FactoryBean实现,引入了中间层。
若你定义了名为 foo 的ProxyFactoryBean,则引用 foo 的对象不会看到ProxyFactoryBean实例本身,而是在ProxyFactoryBean中实现的 getObject()创建的对象。该方法创建了一个包装目标对象的 AOP 代理。
使用ProxyFactoryBean或其他 IoC-aware 类创建 AOP 代理的最大好处之一是advices和pointcuts也可以由 IoC 管理。这是一个强大的功能,使某些方法很难用AOP 实现的开启了新途径。例如,advice本身可能引用应用对象(不仅是目标对象,该对象应在任何 AOP 框架中都可用),从而受益于DI提供的所有可插拔性。
2 JavaBean属性 与大多数FactoryBean实现类似,
ProxyFactoryBean
类本身就是一个JavaBean。其属性用于:
- 指定要代理的目标
- 指定是否使用 CGLIB
org.springframework.aop.framework.ProxyConfig
(Spring所有 Aop 代理工厂的父类) 继承的。这些关键属性包括:- proxyTargetClass
- optimize
- frozen
- exposeProxy
ProxyFactoryBean
其他属性包括:- proxyInterfaces
- interceptorNames
这些名称是当前工厂中的bean名称,包括来自祖先工厂的bean名称。你不能在这里使用bean引用, 因为这样做会导致
ProxyFactoryBean忽略了推荐的单例设置。
可以用 * 附加拦截器名称。这样做会导致应用所有advisor beans与名称,开始与*应用前的部分。
- singleton
3 JDK和CGLIB代理
ProxyFactoryBean
如何选择为特定目标对象(将代理)创建基于 JDK 的代理或基于 CGLIB 的代理。ProxyFactoryBean在创建基于 JDK 或 CGLIB 的代理方面的行为在Spring的 1.2.x 版本和 2.0如果要代理的目标对象类别(以下简称目标类)不实现任何接口,则创建基于 CGLIB 的代理。这是最简单的方案,因为 JDK 代理是基于接口的,没有接口意味着 JDK 代理甚至是不可能的。您可以插入目标豆,并通过设置拦截器命名属性来指定拦截器列表。请注意,即使代理工厂豆的代理目标类属性被设置为虚假,也创建基于 CGLIB 的代理。(这样做是没有意义的,最好从豆的定义中删除,因为它充其量是多余的,而且,在最坏的情况下是令人困惑的。
版本之间发生了变化。ProxyFactoryBean现在在自动检测接口方面表现出与TransactionProxyFactoryBean类类似的语义。
总结 【带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理】本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- 我们重新了解付费。
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- C语言中的时间函数clock()和time()你都了解吗
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树