首页 > 其他 > 详细

JDK动态代理

时间:2018-11-03 13:31:54      阅读:162      评论:0      收藏:0      [点我收藏+]

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动态代理

原文:https://www.cnblogs.com/daxiong225/p/9900393.html

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