项目中常用的aop技术一般要么 使用java原生aop,要么使用cglib框架,
jdk aop 需要代理类集成一个InvocationHandler接口才能实现对目标类的代理
public class AopTest implements InvocationHandler , TargetOperate{
AopTest op;
public AopTest() {}
public AopTest(AopTest op) {
this.op = op;
}
public static void main(String[] args) {
AopTest t= new AopTest();
TargetOperate p = (TargetOperate) (Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),
t.getClass().getInterfaces(),
new AopTest(t)));
p.execute("ett");
}
/**
* proxy:代理类代理的真实代理对象com.sun.proxy.$Proxy0
* method:我们所要调用某个对象真实的方法的Method对象
* args:指代代理对象方法传递的参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before execute");
op.execute(args[0].toString());
System.out.println("after execute");
return null;
}
@Override
public void execute(String name) {
System.out.println(name);
}
}
由此实现了对目标对象的代理,在此需要注意的是目标对象要实现一个接口,Proxy返回的要是不能是目标对象本身,上面的变量p如果换成AopTest修饰则会运行异常