3 AOP 的实现机制
本章节将详细介绍 AOP 有各种实现机制。
3.1 动态代理
Java 在 JDK1.3 后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用
动态代理 实现 AOP 需要 有 四个角 色:被 代理的 类 ,被 代 理类的 接口, 织入器 , 和
InvocationHandler,而织入器使用接口反射机制生成一个代理类,然后在这个代理类中织入
代码。被代理的类是AOP里所说的目标,InvocationHandler是切面,它包含了Advice 和 Pointcut。
3.1.1 使用动态代理
那如何使用动态代理来实现 AOP。下面的例子演示在方法执行前织入一段记录日志的代
码,其中 Business 是代理类,LogInvocationHandler 是记录日志的切面,IBusiness, IBusiness2
是代理类的接口,Proxy.newProxyInstance 是织入器。
public static void main(String[] args) {
//需要代理的接口,被代理类实现的多个接口都必须在这里定义
Class[] proxyInterface = new Class[] { IBusiness.class,
IBusiness2.class };
//构建AOP的Advice,这里需要传入业务类的实例
LogInvocationHandler handler = new LogInvocationHandler(new
Business());
//生成代理类的字节码加载器
ClassLoader classLoader = DynamicProxyDemo.class.getClassLoader();
//织入器,织入代码并生成代理类
IBusiness2 proxyBusiness = (IBusiness2)
Proxy.newProxyInstance(classLoader, proxyInterface, handler);
//使用代理类的实例来调用方法。