美文网首页
14.7动态代理(下)

14.7动态代理(下)

作者: 陈晓松快点跑 | 来源:发表于2024-10-23 09:54 被阅读0次

接上一篇小作文,上次讲了一个贱人中层领导,还有一个牛马的故事。
这次的故事中,将登场一位超级无敌贱人,暂且叫他超级贱人中层领导。
来请看表演。

下面代表打工人必须都得会啥,必须会这些武功,才能进厂打工。

进厂必须会点啥

interface SomeMethods {
    void boring1();
    void boring2();
    void interesting(String arg);
    void boring3();
}

↓↓↓
然后隆重介绍一下打工人

Implementation类(打工人类)

class Implementation implements SomeMethods {

    @Override
    public void boring1() {
        System.out.println("Implementation boring1");
    }

    @Override
    public void boring2() {
        System.out.println("Implementation boring2");
    }

    @Override
    public void interesting(String arg) {
        System.out.println("Implementation interesting : " + arg);
    }

    @Override
    public void boring3() {
        System.out.println("Implementation boring3");
    }
}

打工人有了,配套上线超级贱人领导。

超级无敌贱人领导类

class MethodSelector implements InvocationHandler {

    private Object proxied;

    public MethodSelector(Object proxied) {
        this.proxied = proxied;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        if (method.getName().equals("interesting"))
            System.out.println("Proxy detected the interesting method");

        return method.invoke(proxied, args);
    }
}

main

public class SelectingMethods {
    public static void main(String[] args) {
        SomeMethods proxy = (SomeMethods) Proxy.newProxyInstance(
                SomeMethods.class.getClassLoader(),
                new Class[] {SomeMethods.class},
                new MethodSelector(new Implementation())
        );
        proxy.boring1();
        proxy.boring2();
        proxy.interesting("bonobo");
        proxy.boring3();
    }
}

输出

Implementation boring1
Implementation boring2
Proxy detected the interesting method
Implementation interesting : bonobo
Implementation boring3

注意看输出的第三行与第四行
Proxy detected the interesting method 这是超级贱人加上的,因为他只对这条感兴趣
Implementation interesting : bonobo
这里就是最贱的地方了,超级无敌贱人中层领导比上一片的普通贱人领导,更贱。
因为,超级贱人只对有工作成绩的工作向上级汇报,并且加上自己的功劳。嗯

作案现场还原

class MethodSelector implements InvocationHandler {

    private Object proxied;

    public MethodSelector(Object proxied) {
        this.proxied = proxied;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //--------------------------------------------------------------------------
        if (method.getName().equals("interesting"))
            System.out.println("Proxy detected the interesting method");
        //--------------------------------------------------------------------------

        return method.invoke(proxied, args);
    }
}

if (method.getName().equals("interesting"))

System.out.println("Proxy detected the interesting method");

翻译一下就是,如果打工人做了这个方法名为interesting的事,那么就,你懂的。

天选打工人也是没有办法,因为他是被领导管理的,持有的。都是领导通知他做什么。所以对领导来说,全程监控打工人做了什么,太容易了。

好了,打工人你学废了吗。快去干活吧。

相关文章

  • java动态代理讲解(实例讲解)

    动态代理 功能不更改原有业务功能的情况下,记录方法执行日志 实现方法 1.动态代理 jdk动态代理:jdk动态代理...

  • 面试系列~动态代理实现与原理

    动态代理有JDK动态代理, CGLIB动态代理, SpringAOP动态代理 一,JDK动态代理  jdk动态代理...

  • java动态代理

    原文地址:java动态代理 代理 最近在学习 Spring 框架,AOP涉及到动态代理的知识,故整理一下,了解动态...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • 代理模式

    今天特意将静态代理、JDK动态代理、CGLIB动态代理 和 String AOP整理如下,与各位看客分享下。 1....

  • 设计模式

    结构型模式 介绍一下 如何实现动态代理? 考察点:动态代理流程参考回答: Java实现动态代理的大致步骤如下: 1...

  • Spring的AOP原理分析

    一 动态代理 动态代理分为JDK动态代理和CGLIB动态代理 jdk动态代理 被代理类(目标类)和代理类必须实现同...

  • 1.【每日分享】动态代理实现一JDK原生动态代理

    Java动态代理对象,今天和大家分享一下动态代理的一种实现方案,使用JDK原生方案。 什么是动态代理 我们比较熟悉...

  • JDK动态代理和cglib动态代理

    回顾一下JDK动态代理和cglib动态代理,转自我的BLOG: http://zeusjava.com/2015/...

  • 设计模式之代理模式

    代理分为静态代理和动态代理。 动态代理又包括基于JDK的动态代理、基于CGlib 的动态代理、基于Aspectj实...

网友评论

      本文标题:14.7动态代理(下)

      本文链接:https://www.haomeiwen.com/subject/ngcddjtx.html