java动态代理(Proxy、Invocation)
动态代理的作用(个人理解):
可以实现类似拦截器的功能,比如执行某个方法前后,需要执行一些其它操作(如开启关闭事务,记录日志、权限校验等)。
不足(个人理解):
目前仅能创建指定接口的动态代理,如果需要为某个类(该类未实现任何接口)创建动态代理,则无能为力了(实际上通过另外一个开源框架cglib也是可以实现的,只是java本身未提供该功能)。
示例:
接口IHelloWorld
public class Test {public static void main(String[] args) {try {//须用接口来接收IHelloWorld hello = (IHelloWorld)ProxyFactory.getProxyObj(HelloWorld.class.getName());System.out.println("返回结果:"+hello.sayHello("huangqiqing"));} catch (Exception e) {e.printStackTrace();}}}?
输出结果:
执行public abstract java.lang.String IHelloWorld.sayHello(java.lang.String)之前
执行sayHello()
执行public abstract java.lang.String IHelloWorld.sayHello(java.lang.String)之后
返回结果:hello,huangqiqing
?