美文网首页
Java JDK动态代理实例

Java JDK动态代理实例

作者: 在error边缘疯狂试探 | 来源:发表于2020-08-07 16:37 被阅读0次

    房屋出租的接口

    package 动态代理;
    //租房接口
    public interface Rent {
        public void rent();
    }
    
    

    房东实现出租的方法

    package 动态代理;
    // 房东进行租房
    public class Host  implements Rent
    {
        @Override
        public void rent() {
            System.out.println("房东开始出租房子啦!");
        }
    }
    
    

    设置调用处理器,实现InvocaHandler 接口

    package 动态代理;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    // 我的程序调用处理器,通过实现InvocationHandler 编程一个处理器,再通过Proxy 代理类的newProxyInstance()方法 获得 形成的代理对象
    public class MyInvocationHandler implements InvocationHandler {
    //    将被代理的接口对象引入
        private Rent rent;
    
    //    private Object object;
    //
    //    public void setObject(Object object) {
    //        this.object = object;
    //    }
    
        public void setRent(Rent rent) {
            this.rent = rent;
        }
    
        public Object getProxyClass(){
    //        return Proxy.newProxyInstance(this.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
            return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
    
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            seeHouse();
            method.invoke(rent,args);
    //        method.invoke(object,args);
            fare();
            return null;
        }
    //  这里的方法应该是被代理类所需要的通用的方法,比如日志、事务等。。。
        public void seeHouse(){
            System.out.println("中介带你看房!!");
        }
        public void fare(){
            System.out.println("向中介付钱!!");
        }
    
    }
    
    

    客户端调用

    package 动态代理;
    
    public class Client {
    
        public static void main(String[] args) {
    //        创建出要被代理的角色
            Host host = new Host();
            MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
    //        将被代理的角色放入调用处理器中
            myInvocationHandler.setRent(host);
            Rent proxyClass = (Rent) myInvocationHandler.getProxyClass();
            proxyClass.rent();
    
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Java JDK动态代理实例

          本文链接:https://www.haomeiwen.com/subject/oaafdktx.html