Spring Aop 的底层实现技术--- Jdk 动态代理
JDK 动态代理
在 JDK 1.3 以后提供了动态代理的技术,允许开发者在运行期创建接口的代理实例。在
Sun 刚推出动态代理时,还很难想象它有多大的实际用途,现在我们终于发现动态代理是
实现 AOP 的绝好底层技术。
JDK 的动态代理主要涉及到 java.lang.reect 包中的两个类:Proxy 和
InvocationHandler。其中 InvocationHandler 是一个接口,可以通过实现该接口定义
横切逻辑,在并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一起。
而 Proxy 为 InvocationHandler 实现类动态创建一个符合某一接口的代理实例。这样
讲一定很抽象,我们马上着手动用 Proxy 和 InvocationHandler 这两个魔法戒对上一节
中的性能监视代码进行 AOP 式的改造。
首先,我们从业务类 ForumServiceImpl 中删除性能监视的横切代码,使
ForumServiceImpl 只负责具体的业务逻辑,如所示:
代码清单 5 ForumServiceImpl:移除性能监视横切代码
package com.baobaotao.proxy;
public class ForumServiceImpl implements ForumService {
public void removeTopic(int topicId) { ①
System.out.println("模拟删除 Topic 记录:"+topicId);
try {
Thread.currentThread().sleep(20);
} catch (Exception e) {
throw new RuntimeException(e);
}
②
}
public void removeForum(int forumId) { ①
System.out.println("模拟删除 Forum 记录:"+forumId);
try {
评论2
最新资源