动态代理是轻量级容器实现AOP拦截的一种主要方式。
IAandB.java
public interface IAandB ...{
public void doSomething();
}
------------------------------------------------
A.java

public class A implements IAandB...{

public void doSomething() ...{
System.out.println("A.a();");
}
}
-------------------------------------------------
B.java

public class B implements IAandB...{
public void doSomething() ...{
System.out.println("B.b();");
}
}
-----------------------------------------------
Handler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class Handler implements InvocationHandler ...{
private IAandB ab;

public Handler(IAandB ab) ...{
this.ab = ab;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable ...{
Object obj = method.invoke(ab,args);
return obj;
}
}
------------------------------------------------------------------
Test1.java 测试类代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Test1 ...{
public static void main(String[] args) ...{
IAandB ab = new A();
try ...{
InvocationHandler ds = new Handler(ab);
IAandB ab1 = (IAandB) Proxy.newProxyInstance(ab.getClass()
.getClassLoader(), ab.getClass().getInterfaces(), ds);
ab1.doSomething();

} catch (Exception e) ...{
e.printStackTrace();
}
}
}
--------------------------------------------------------------------

本文通过具体的Java代码示例介绍了如何使用动态代理来实现面向切面编程(AOP)中的拦截功能。从定义接口IAandB开始,到具体实现类A和B,再到自定义的Handler类作为调用处理器,最后在测试类Test1中创建动态代理实例并调用目标方法,完整地展示了动态代理的工作原理。
1939

被折叠的 条评论
为什么被折叠?



