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

  • 相关阅读:
    2008年10月小记(SQL删除重复记录,生成表结构,字符串特性,statistics io)
    mysql 中 @
    使用单个innodb表,实现锁,防止游戏被刷物品或者其它资源!
    PSL
    8年PHP,懂点内核, 能写PHP扩展,5年网站经历+3年webgame经历,找个兼职
    Php aes算法
    MySQL触发器自动更新memcache
    怎么配置MySQL服务器(Incorrect string value)
    使用 PHP 将 XML 转化为易读的数组!
    使用Valgrind 查找内存泄露
  • 原文地址:https://www.cnblogs.com/liu-Gray/p/5196282.html
Copyright © 2011-2022 走看看