JDK动态代理

Posted daxiong225

tags:

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

Jdk 动态代理通过反射包提供的方式,必须要借助一个借口才能产生反射对象

1.定义接口:

public interface HelloWorld 
{
    public void sayHelloWorld();
    public void sayBye();
}

2.实现接口。

public class HelloWorldImpl implements HelloWorld
{

    @Override
    public void sayHelloWorld() 
    {
        System.out.println("hello world.....");
    }

    @Override
    public void sayBye() 
    {
        System.out.println("good bye.....");
    }

}

3. JDK 动态代理要实现逻辑类,必须去实现java.lang.reflect.InvocationHandler接口, 里面定义了invoke方法。

public class JdkProxy implements InvocationHandler
{    
        //真实对象
    private Object target;
    
        //返回代理对象
    public Object bind(Object target)
    {
        this.target=target;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }
        //代理方法逻辑

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("entrance proxy method....");
        System.out.println("before call real obj method.....");
        Object obj = method.invoke(target, args);//相当调用sayHello/bye
        System.out.println("after real obj.....");
        return obj;
    }
}

4.测试类:

public class JdkProxyTest {

    public static void main(String[] args) 
    {
        JdkProxy jdk = new JdkProxy();
        HelloWorld hellow = (HelloWorld) jdk.bind(new HelloWorldImpl());
        hellow.sayHelloWorld();
        hellow.sayBye();
    }

}
输出:
entrance proxy method....
before call real obj method.....
hello world.....
after real obj.....
entrance proxy method....
before call real obj method.....
good bye.....
after real obj.....

 

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

JDK动态代理CGLIB动态代理

JDK动态代理CGLIB动态代理

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

JDK动态代理与Cglib动态代理

JDK动态代理与CGLib动态代理

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