• JDK的动态代理


    代理的目的就是在你做事之前、之后、过程中。。。不改变你的行为(代码)加点其他东东

    接口:

    package com.liule.code;
    
    public interface Bookinterface
    {
        public void addBook();
    }

    委托类:

    package com.liule.code;
    
    public class Book implements Bookinterface
    {
        @Override
        public void addBook()
        {
            System.out.println("add");
        }
    }

    代理类:

    public class BookProxy implements InvocationHandler
    {
        private Object target;//委托对象,也可以直接是Book
        
        public BookProxy(Object target)
        {
            this.target = target;
        }
        
        
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable
        {
            System.out.println("start");
            Object result = method.invoke(target,args);//实现委托类的method,参数args
            System.out.println("end");
            return result;
            
        }
    }

    测试:

    public class test
    {
        public static void main(String[] args)
        {
            Bookinterface boo = new Book();
            Bookinterface proxy = (Bookinterface) Proxy.newProxyInstance(boo.getClass().getClassLoader(),boo.getClass().getInterfaces(),new BookProxy(boo));
            proxy.addBook();
        }
    }

    InvocationHandler接口: 
    public interface InvocationHandler { 
    public Object invoke(Object proxy,Method method,Object[] args) throws Throwable; 

    参数说明: 
    Object proxy:指被代理的对象,一般不用
    Method method:要调用的方法 
    Object[] args:方法调用时所需要的参数

    Proxy类: 
    Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下的操作方法: 
    public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, 
    InvocationHandler h) 
                                   throws IllegalArgumentException 
    参数说明: 
    ClassLoader loader:类加载器 
    Class<?>[] interfaces:得到全部的接口 
    InvocationHandler h:得到InvocationHandler接口的子类实例

  • 相关阅读:
    JavaScript总结(一)
    序列化函数
    random与os,sys模块
    认识模块
    时间模块
    日志处理
    异常处理
    类的约束
    反射
    区分函数以及方法
  • 原文地址:https://www.cnblogs.com/liu-Gray/p/5196282.html
Copyright © 2020-2023  润新知