zoukankan      html  css  js  c++  java
  • 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接口的子类实例

  • 相关阅读:
    从书上学的东西(顺带总结一发)
    网上讲的好的知识点汇总
    土地征用题解(兼斜率优化详解)
    Blocks题解(区间dp)
    高精度模板汇总
    动态规划总结
    异或序列(题解)(莫队)
    小Z的袜子(题解)(莫队)
    小B的询问(题解)(莫队)
    凸包模板——Graham扫描法
  • 原文地址:https://www.cnblogs.com/liu-Gray/p/5196282.html
Copyright © 2011-2022 走看看