码迷,mamicode.com
首页 > 其他好文 > 详细

JDK动态代理

时间:2018-11-03 14:05:43      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:print   产生   tcl   lan   new   interface   输出   span   eth   

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

标签:print   产生   tcl   lan   new   interface   输出   span   eth   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!