java aop详解

项目中常用的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);
	}
}

java aop详解_第1张图片由此实现了对目标对象的代理,在此需要注意的是目标对象要实现一个接口,Proxy返回的要是不能是目标对象本身,上面的变量p如果换成AopTest修饰则会运行异常

java aop详解_第2张图片

 

你可能感兴趣的:(aop)