美文网首页
Proxy.newProxyInstance 理解

Proxy.newProxyInstance 理解

作者: 细雨么么 | 来源:发表于2021-06-30 14:22 被阅读0次

1.准备接口

interface Animals {
    fun sounds(name:String):String
    fun eat(name: String):String
}

2.准备实现类

class Dog :Animals {
    override fun sounds(name: String): String {
        println("$name 再叫")
        return "汪汪汪"
    }


    override fun eat(name: String): String {
        println("$name 再吃" )
        return "muniangmuniang"
    }
}

3.准备代理 及 Main函数

fun main() {
    val dog: Dog = Dog()


    val proxy = Proxy.newProxyInstance(
        dog.javaClass.classLoader, dog.javaClass.interfaces
    ) { proxy, method, args ->
        println(method.name)
        args?.forEach {
            println(it.toString())
        }
        println("open")
        method.invoke(dog, args[0])
        println("stop")
        null
    } as Animals

    proxy.sounds("张三")
    proxy.eat("lisi")
    println("xxx")




}


END 附上打印输出控制台

sounds
张三
open
张三 再叫
stop
eat
lisi
open
lisi 再吃
stop
xxx

Process finished with exit code 0

EXTRA再来点额外的。

public  void main2() {
        final Animals dog=new Dog();
        //com.example.learnkt.proxy.Dog is not an interface  ERROR 下面这个是执行不了的
        Animals animals= (Animals) Proxy.newProxyInstance(Dog.class.getClassLoader(), new Class[]{Dog.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                method.invoke(dog,args[0]);

                return null;
            }
        });

        Animals animals2= (Animals) Proxy.newProxyInstance(Animals.class.getClassLoader(), new Class[]{Animals.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                method.invoke(dog,args[0]);

                return null;
            }
        });

//        animals.eat("baba");  //ERROR
        animals2.sounds("hhsx");
    }

相关文章

  • Proxy.newProxyInstance 理解

    1.准备接口 2.准备实现类 3.准备代理 及 Main函数 END 附上打印输出控制台 EXTRA再来点额外的。

  • JDK中的Proxy动态代理原理剖析

    主要API类是: ``` Proxy.newProxyInstance public static Object ...

  • Proxy.newProxyInstance

    简单实现 Q:通过代理接口的方式进行声明, 然而不通过类实现的方式进行使用,而是使用其他方式实现.比如MyBati...

  • java反射和动态代理

    java动态代理Proxy.newProxyInstance 详解java代理机制(静态代理、动态代理)以及使用场景

  • java 动态代理

    下面就直接给出例子: 实际应用中都是直接调用 JDK 的 Proxy.newProxyInstance ,不过我们...

  • JDK动态代理

    JDK动态代理是基于接口使用,通过Proxy.newProxyInstance方法使用。传入参数:当前类加载器、目...

  • 手写Retrofit

    遇到的坑:1、反射自动生成实例的坑。Proxy.newProxyInstance()首先,利用反射获取类方法是运行...

  • 高仿JDK动态代理 底层源码实现

    动态代理实现思路 实现功能:通过Proxy.newProxyInstance返回代理对象 1、创建一个处理业务逻辑...

  • JDK的动态代理

    JDK动态代理就是通过Proxy.newProxyInstance来创建代理对象的: 第一个参数是ClassLoa...

  • java动态代理Proxy.newProxyInstance

    动态代理(dynamic proxy) 利用Java的反射技术(Java Reflection),在运行时创建一个...

网友评论

      本文标题:Proxy.newProxyInstance 理解

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