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接口的子类实例

  • 相关阅读:
    数据分析只能当一辈子取数机?可能你缺少这个基础思维
    Funnel:漏斗图
    Calendar:日历图
    【自考】数据结构第五章图,期末不挂科指南,第9篇
    机器学习——TensorFlow Mnist数据集入门
    SpringCloud Alibaba微服务实战四
    视觉映射配置项VisualMapOpts
    chrome使用技巧(看了定不让你失望)
    chrome使用技巧(看了定不让你失望)
    chrome使用技巧(看了定不让你失望)
  • 原文地址:https://www.cnblogs.com/liu-Gray/p/5196282.html
Copyright © 2011-2022 走看看