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.....

 

posted on 2018-11-03 12:43  卖肾割阑尾  阅读(100)  评论(0编辑  收藏  举报

导航