java jdk动态代理 实例 简单明了 对初学者非常有效

来源:互联网 发布:中创软件 编辑:程序博客网 时间:2024/05/05 10:43

注意:JDK的动态代理依靠接口实现

实例如下:

package com.jdkproxy;
/**
 * 1、定义一个图书接口
 */
public interface Book {
//添加图书方法
public void addBook(String s);

}


2、定义一个类实现了Book接口

package com.jdkproxy;

public class BookImpl implements Book{

@Override
public void addBook(String s) {
System.out.println(s+"增加图书的方法.......");

}
}

3、定义一个动态代理类

package com.jdkproxy;

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


public class BookProxy 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 {
Object result=null;
System.out.println("事物开始.....");
result=method.invoke(target, args);
System.out.println("事物结束.....");

return result;
}


}

4、定义一个测试类

package com.jdkproxy;

public class TestJdkProxy {


/**
* main函数测试
* JDK的动态代理依靠接口实现,如果有些类并没有实现接口,
* 则不能使用JDK代理,这就要使用cglib动态代理了。
*/
public static void main(String[] args) {
BookProxy bookProxy=new BookProxy();
BookImpl bookImpl=new BookImpl();
//BookImpl proxy=(BookImpl) bookProxy.bind(bookImpl);
Book proxy=(Book) bookProxy.bind(bookImpl);//代理类和委托类进行绑定
proxy.addBook("****");



}


}