问题描述
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable { System.out.println("调用"+method.toString()+"之前"); Object o = method.invoke(proxyobj,args); System.out.println("调用"+method.toString()+"之后"); return o; }这样执行原代理的时候,都会由动态代理在该方法执行之前和之后各输出一句话,但是从这个例子看来,代理对象所增加的处理是一样的,实际的开发中或者框架中是用if else 或switch来判断方法名来判断具体增加哪些操作码?:)
解决方案
这个的确是一个good question,很难有一个特定的答案。在一个项目中代理的使用,基本都是在一个通用的功能上,就是所谓的切面,切入点的概念,这些时候这些方法都有共性。就目前的程序设计中,大量的使用annotation,在动态代理中基本都是捕捉annotation来进行这些操作。如果真的只有某个方法需要进行如何楼主代码中的判断,这个时候代理就没有任何优势了,完全可以再程序代码中直接进行操作。不过我的这个还是解释不了一些细节问题。
时间: 2024-10-25 06:46:44