谈谈Java的动态代理
2018-11-25 本文已影响0人
在彼处
动态代理机制的设计的目的是解耦,在很多类中,一个函数需要重复写,如果每个类中都有该函数,造成代码的耦合,单独提出来之后,这个时候很多类可以直接调用,则这几个类又和特定的方法耦合了,可以用动态代理解耦合;
jdk的动态代理只能为接口创建动态代理;
接口实现的方法newProxyInstance方法,直接可以创建一个动态代理对象,该代理对象的实现类实现了interfaces指定的系列接口,执行动态代理对象的每个方法时都会被替换执行InvocationHandle对像的invoke方法
在该程序中,Dog是个接口,接口中有三个方法,传统方法中,创建一个Dog对象时候需要new Dog()的形势才能创建出来,现在通过动态代理机制,直接创建一个动态代理对象出来,通过
Dog dog = new GunDog();
Dog dog1 = (Dog) MyProxyFactory.getProxy(dog);
//执行具体方法的时候都会去调用IncocationHandler中的invoke()方法,可以在invoke()方法中定义一些其他方法实现其他方法
dog1.info();//直接调用
dog1.run();//直接调用
dog1.bark("哈哈");