- 浏览: 6359281 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
用ProxyFactoryBean创建AOP代理
使用Spring提供的类org.springframework.aop.framework.ProxyFactoryBean是创建AOP的最基本的方式 。
使用 ProxyFactoryBean 来创建 AOP 代理的最重要的优点之一是 IoC 可以管理通知和切入点。 这是一个非常的强大的功能,能够实现其他 AOP 框架很难实现的特定的方法。例如,一个通知本身可以引用应用对象(除了目标对象,它在任何 AOP 框架中都可以引用应用对象),这完全得益于依赖注入所提供的可插入性。
1、使用ProxyFactoryBean代理目标类的所有方法
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="log" class="com.gc.action.LogAround"/> <bean id="timeBook" class="com.gc.action.TimeBook"/> <!--设定代理类--> <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <!--这里代理的是接口--> <property name="proxyInterfaces"> <value>com.gc.impl.TimeBookInterface</value> </property> <!--是ProxyFactoryBean要代理的目标类--> <property name="target"> <ref bean="timeBook"/> </property> <!--程序中的Advice--> <property name="interceptorNames"> <list> <value>log</value> </list> </property> </bean> </beans>
代码说明:
● id为log的Bean,是程序中的Advice。
● id为timeBook的Bean,是ProxyFactoryBean要代理的目标类。
● id为logProxy的Bean,就是ProxyFactoryBean。
● ProxyFactoryBean的proxyInterfaces属性,指明要代理的接口。
● ProxyFactoryBean的target属性,指明要代理的目标类 ,这个目标类实现了上面proxyInterfaces属性指定的接口。
● ProxyFactoryBean的interceptorNames属性,指明要在代理的目标类中插入的Adivce 。
● ProxyFactoryBean还有一个proxyTargetClass属性,如果这个属性被设定为“true”,说明 ProxyFactoryBean要代理的不是接口类,而是要使用CGLIB方式来进行代理,后面会详细讲解使用CGLIB方式来进行代理。
注意: ProxyFactoryBean的proxyInterfaces属性只支持使用字符串的方式进行注入,不支持使用Bean的依赖方式进行注入。
如果ProxyFactoryBean 的proxyInterfaces 属性没有 被设置,但是目标类实现了一个(或者更多) 接口,那么ProxyFactoryBean 将自动检测到这个目标类已经实现了至少一个接口, 一个基于JDK的代理将被创建 。被实际代理的接口将是目标类所实现的全部 接口;实际上,这和在proxyInterfaces 属性中列出目标类实现的每个接口的情况是一样的。然而,这将显著地减少工作量以及输入错误的可能性。
通知需要实现这几个接口之一:
http://fruitking.iteye.com/blog/601106
2、使用ProxyFactoryBean代理目标类的指定方法
在上面的示例中,Advice会代理目标类的所有方法。如果要代理目标类的指定方法,则需要使用Spring提供的 org.springframework.aop.support.RegexpMethodPointcutAdvisor类。代理目标类的指定方法的示例代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="log" class="com.gc.action.LogAround"/> <bean id="timeBook" class="com.gc.action.TimeBook"/> <!--代理目标类的指定方法--> <bean id="logAdvisor"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref bean="log"/> </property> <!--指定要代理的方法--> <property name="patterns"> <value>.*doAuditing.* </value> </property> </bean> <!--设定代理类--> <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.gc.impl.TimeBookInterface</value> </property> <property name="target"> <ref bean="timeBook"/> </property> <property name="interceptorNames"> <list> <value>logAdvisor</value> </list> </property> </bean> </beans>
代码说明:
● 在id为logAdvisor的Bean中设定Advice和要指定的方法。
● 把id为logProxy的Bean的interceptorNames属性值改为logAdvisor。
● logAdvisor的advice属性指定Advice。
● logAdvisor的patterns属性指定要代理的方法。“.doAuditing”表示只有doAuditing()方法才使用指定的Advice。
patterns属性值使用的是正则表达式,关于正则表达式的使用,下节将会进行讲解。
注意: 因为要使用正则表达式,所以要把spring-framework-2.0-m1\lib\oro目录下的
jakarta-oro-2.0.8.jar加入到ClassPath下
代理模式,JDK动态代理,SpringAOP来龙去脉
http://fruitking.iteye.com/blog/601106 (重要参考)
参考:http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch07s05.html
http://hi.baidu.com/javasite/blog/item/8989280358d7ed723912bb1e.html/cmtid/700035c42f8f8da28226ac95
http://hi.baidu.com/ganlanzhi/blog/item/be1dd939234a06f63b87ce7a.html
发表评论
-
Spring 配置多数据源实现数据库读写分离
2014-10-09 11:05 58230现在大型的电子商务 ... -
strust_spring_hibernate的优缺点
2014-10-08 09:41 2761struts框架具有组件的模块化,灵活性和重用性的优点,同时 ... -
声明式事务
2014-09-03 17:53 1779跟开涛学Spring 数据库事务 本 ... -
@Component注解
2014-08-20 15:43 37837Spring自带的@Component注 ... -
日志记录、性能监控的三种实现方式
2014-08-18 14:09 7638一、需解决的问题 部分API有签名参数(signatur ... -
BeanWrapper 设置和获取属性值
2014-08-18 11:10 96985.4. Bean处理和BeanWrapper - Spr ... -
SpringMVC的拦截器Interceptor
2014-08-15 10:23 5079跟开涛学SpringMVC 接口: Ha ... -
AOP
2014-08-14 17:00 10753跟开涛学Spring 问题: 使用BeanFac ... -
Bean作用域
2014-08-14 15:16 1802跟开涛学Spring 附:单例模式的DoubleChec ... -
DI
2014-08-14 10:26 1795跟开涛学Spring DI: ... -
IOC + 容器
2014-08-13 18:03 2917跟开涛学Spring 传统应用程序示意图 ... -
Spring中Bean初始化实例【重要】
2014-07-21 16:48 61246可参考文章: Spring Bean 生命周期 Spr ... -
bean的生命周期
2014-07-21 15:41 1529在spring中,从BeanFactory或Applica ... -
Spring中BeanPostProcessor
2014-07-21 15:19 50704Spring提供了很多扩展 ... -
context,listener,filter,servlet加载顺序
2014-04-22 14:08 8080web.xml加载过程(步骤):1.启动WEB项目的时候, ... -
Spring+hibernate的session问题
2013-09-27 10:20 3193在spring框架和hibernate框架集成的时候,根据 ... -
HttpServletRequestWrapper 用法
2013-09-25 16:50 8515HttpServletRequestWrapper ... -
AOP
2012-05-09 10:14 1625引子: AOP(面向方面 ... -
IOC
2012-05-09 10:11 1600引述:IoC(控制反转:I ... -
事务隔离级别
2012-03-08 11:39 10513模拟数据库的四种隔离级别1 模拟数据库的四种隔离级 ...
相关推荐
Spring 基于 ProxyFactoryBean 创建 AOP 代理 ProxyFactoryBean 是 Spring 中用于创建 AOP 代理的重要工具类,它提供了完整的控制能力,可以生成指定的内容。下面将详细介绍 ProxyFactoryBean 的使用方法和 Spring...
总结来说,ProxyFactoryBean是Spring AOP实现的关键组成部分,它为我们提供了创建代理对象的能力,使得我们可以灵活地在运行时增强或拦截对象的行为。通过对ProxyFactoryBean的深入理解和使用,我们可以更好地利用...
- **使用ProxyFactoryBean创建AOP代理**:`ProxyFactoryBean`是Spring中的一个类,用于创建AOP代理。当定义了一个名为`myfactory`的`ProxyFactoryBean`时,引用`myfactory`的对象实际上获取的是`ProxyFactoryBean....
Spring AOP会为每个目标对象创建一个子类,并覆盖其方法,添加AOP代理逻辑。 4. **代理模式的创建**:Spring AOP 使用`org.springframework.aop.framework.ProxyFactoryBean`或`@EnableAspectJAutoProxy`注解来配置...
3. **使用ProxyFactoryBean创建AOP代理**: - **ProxyFactoryBean**是Spring提供的用于创建AOP代理的工具类。 - 当引用名为`myfactory`的`ProxyFactoryBean`对象时,实际返回的是由`getObject()`方法创建的代理...
`ProxyFactoryBean`是Spring AOP实现中的一个重要类,它用于创建代理对象,使我们能够实现动态代理以进行方法拦截。下面将深入分析`ProxyFactoryBean`的源码,探讨其工作原理和使用方式。 `ProxyFactoryBean`继承自...
- **使用ProxyFactoryBean创建AOP代理**:一种常用的创建AOP代理的方式。 - **使用ProxyFactory创建AOP代理**:另一种创建AOP代理的方式。 - **操作被通知的对象**:如何访问被代理的对象。 - **使用auto-proxy...
`ProxyFactoryBean`是Spring提供的一个工厂bean,用于创建AOP代理对象。它可以创建JDK动态代理或CGLIB代理,具体取决于目标对象是否实现了接口。`ProxyFactoryBean`允许我们配置拦截器、后置处理器等,这些都是在...
三、Spring AOP代理原理 Spring AOP通过两种类型的代理来实现: 1. JDK动态代理:适用于目标对象实现了接口的情况,性能较低,需要定义代理接口。 2. CGLIB代理:可以代理接口和非final类,性能较高,通过生成字节码...
6. 目标对象(Target Object):被AOP代理的对象。 7. 代理(Proxy):AOP框架创建的对象,用于在目标对象周围拦截方法调用。 二、Spring AOP实现机制 Spring AOP通过动态代理来实现,主要有两种代理方式: 1. ...
Spring的AOP代理(无论是JDK还是CGLIB)都会实现这个接口,并在intercept()方法中插入通知逻辑。 此外,Spring还提供了基于注解的AOP支持,如@Aspect、@Before、@After等,这使得AOP的使用更加便捷。在编译时,...
4. **AOP代理的创建** Spring AOP在启动时会根据配置创建代理对象。如果目标类实现了接口,将使用JDK动态代理;否则,使用CGLIB代理。代理对象在调用目标方法时会插入通知逻辑。 5. **代理对象的工作原理** 当...
ProxyFactoryBean是Spring AOP用于创建代理对象的主要工具,它实现了BeanFactoryAware、BeanClassLoaderAware和FactoryBean接口,使其能够利用IOC容器的功能来查找并应用Advice和目标对象。 配置和使用...
7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. ...
在Spring AOP的源码中,`org.springframework.aop.framework.ProxyFactoryBean`是创建代理的主要类,它会根据目标类是否有接口选择JDK动态代理或CGLIB。`org.aopalliance.intercept.MethodInterceptor`接口定义了...
`ProxyFactoryBean`和`AspectJProxyFactory`是创建代理对象的关键类。`DefaultAdvisorAdapterRegistry`负责适配不同的通知类型。`MethodBeforeAdviceInterceptor`、`AfterReturningAdviceInterceptor`等类实现了不同...
4. AOP代理对象的来源和类型 - **TargetSource(目标源)**:被代理对象的来源。 - **SingletonTargetSource**:总是返回同一个实例的TargetSource。 - **PrototypeTargetSource**:返回原型bean的TargetSource。...
- **目标对象(Target Object)**:被AOP代理的对象。 - **代理(Proxy)**:Spring AOP创建的对象,用于实现切面的逻辑。 - **织入(Weaving)**:将切面应用到目标对象,创建代理的过程。可以发生在运行时或...