jdk动态代理

Posted 轻语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk动态代理相关的知识,希望对你有一定的参考价值。

1、新增被代理类接口

package com.xiangwen.day5;

public interface Person {
    public void say(String str);
}

2、新建被代理类实现类。

package com.xiangwen.day5;

public class PersonImpl implements Person{
    @Override
    public void say(String str) {
        System.out.println(str);
    }
}

3、新增代理类

package com.xiangwen.day5;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class PersonProx implements InvocationHandler {
    private Person person;

    public PersonProx(Person person) {
        this.person = person;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("befre---------------");
        Object o=method.invoke(person,args);
        System.out.println("end-----------------");
        return o;
    }
}

4、测试

package com.xiangwen.day5;

import org.omg.CORBA.portable.InvokeHandler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Test {
    public static void main(String[] args) {
        Person person=new PersonImpl();
        InvocationHandler personProx=new PersonProx(person);
        Person p= (Person) Proxy.newProxyInstance(personProx.getClass().getClassLoader(),person.getClass().getInterfaces(),personProx);
        p.say("hello");
    }
}

5、结果

 

以上是关于jdk动态代理的主要内容,如果未能解决你的问题,请参考以下文章

JDK动态代理CGLIB动态代理

JDK动态代理CGLIB动态代理

(java反射-JDK动态代理)+CGLIB动态代理

JDK动态代理与Cglib动态代理

JDK动态代理与CGLib动态代理

代理模式(静态代理jdk动态代理CGLib动态代理)