zoukankan      html  css  js  c++  java
  • Java 动态代理

    下面是一个简单的动态代理。

    管理员一般有更新的功能

    public interface AdminService {
            void update();
    }

    下面是管理员的实现类,假设只能修改

    public class AdminServiceImpl implements AdminService{
        public void update() {
            System.out.println("修改管理系统数据");
        }
    
    }

    现在我们可能需要添加一个超级管理员,他不仅能够修改,还能添加。普通的方法是在创建一个类实现AdminService,但是超级管理员只有一个,并不是范例。如果基类换成其它类,可能出现很多奇奇怪怪的例子,因此是无法通过添加实现类来解决的。

    现在先给出动态代理的实现方法

    public class DynamicProxyTest {
        public static void main(String[] args) {
    
            // 方法一
            System.out.println("============ 方法一 ==============");
            AdminService adminService = new AdminServiceImpl();
     
            AdminService proxyAdmin = (AdminService) Proxy.newProxyInstance(
                    adminService.getClass().getClassLoader(), 
                    adminService.getClass().getInterfaces(), 
                    (proxy,method,argss)->{
                        if(method.getName().equals("update")) {
                            System.out.println("添加管理系统数据");
                            return method.invoke(adminService, argss);
                        }
                        return null;
                    });
            proxyAdmin.update();
    
    
    
        }
    }

    控制台输出如下,可以看到成功输出了我们想要的。

       

     分析:首先看看第一个不认识的函数:Proxy.newProxyInstance

     public static Object newProxyInstance(ClassLoader loader,
                                              Class<?>[] interfaces,
                                              InvocationHandler h)
            throws IllegalArgumentException
        {
    }

        这个方法的具体描述如下:

     这个方法具体描述还没看懂,看懂了再来更新blog吧

  • 相关阅读:
    Windows操作系统堆和栈的区别
    API1——CppSparseFile
    typedef struct 用法详解和用法小结
    开发人员应该用好的一些网站
    Windows编程中的堆管理
    在VC中编译、运行程序的小知识点
    Script:列出数据库中5%以上链式行的表
    解决Linux上11g的ORA00845错误
    Oracle内部错误:ORA00600[kfioTranslateIO03]一例
    Oracle内部错误:ORA00600[2608]一例
  • 原文地址:https://www.cnblogs.com/minblog/p/12556062.html
Copyright © 2011-2022 走看看