`

JDK的动态代理

阅读更多
直接贴代码了,
先理解代理是怎么回事,
然后再看动态代理

1.接口
2.接口实现类
3.获取代理接口实现类的类

使用场景:拦截器,AOP

1.接口
public interface BookInterface {
public void addBook();
}

2.接口实现类
public class Book implements BookInterface {

@Override
public void addBook() {
// TODO Auto-generated method stub
System.out.println("书增加方法调用");

}

}

3.代理类

public class BookProxy implements InvocationHandler {

//被代理对象
private Object target;

public BookProxy(Object target){
this.target = target;
}

//取得代理对象(代理的目的)
public Object bind(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}

/*
* 通过代理对象调用方法(想要调用的方法)
* (non-Javadoc)
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
@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.运行Test

public class Test {
public static void main(String[] args){
Book book = new Book();
BookProxy proxy = new BookProxy(book);
//取得代理对象
BookInterface bookProxy = (BookInterface) proxy.bind();
bookProxy.addBook();//代理中通过调用类获取Method对象
}
}

很奇怪我的API中没有关于
Proxy.newProxyInstance()这个方法的介绍搞得我一直不理解动态代理是怎么实现的。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics