首页 > 编程语言 > 详细

Java 动态代理

时间:2020-03-23 23:31:47      阅读:124      评论:0      收藏:0      [点我收藏+]

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

管理员一般有更新的功能

 

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吧

 

Java 动态代理

原文:https://www.cnblogs.com/minblog/p/12556062.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!