Java 动态代理简单示例

来源:互联网 发布:android 8源码 编辑:程序博客网 时间:2024/06/13 01:59

接口和实现类:

package dongtaidaili;public interface Interface {  void doSomething();  void somethingElse(String arg);}

package dongtaidaili;public class RealObject implements  Interface{@Overridepublic void doSomething() {System.out.println("开火车.....");}@Overridepublic void somethingElse(String arg) {  System.out.println("开汽车.... " + arg);}}

动态代理对象处理器

package dongtaidaili;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class DynamicProxyHandler implements  InvocationHandler{private Object proxyed;//代理对象 public DynamicProxyHandler(Object proxyed) {        this.proxyed = proxyed;    }@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {  System.out.println("代理工作了.");        return method.invoke(proxyed, args);}}

测试类:

package dongtaidaili;import java.lang.reflect.Proxy;public class Main {public static void main(String[] args) {   //初始化一个实际对象   RealObject real = new RealObject();      //实例化接口对象        Interface proxy = (Interface) Proxy.newProxyInstance(                Interface.class.getClassLoader(), new Class[] {Interface.class},                new DynamicProxyHandler(real));                proxy.doSomething();        proxy.somethingElse("ooooppp");//代理类通过调用Proxy静态方法Proxy.newProxyInstance()可以创建动态代理,    //  这个方法需要得到    //  1.一个类加载器,    //  2.一个你希望该代理实现的接口列表(不是类或抽象类)    //  3.以及InvocationHandler的一个实现类。    //   动态代理可以将所有调用重定向到调用处理器,因此通常会调用处理器的构造器传递一个”实际”对象的引用,    //    从而将调用处理器在执行中介任务时,将请求转发。}}

打印运行结果:

代理工作了.

开火车.....

代理工作了.

开汽车.... ooooppp



原创粉丝点击