当前位置:首页 > 开发 > 编程语言 > JDK JVM > 正文

JDK的动态代理

发表于: 2015-05-29   作者:chou_qi   来源:转载   浏览:
摘要: 直接贴代码了, 先理解代理是怎么回事, 然后再看动态代理 1.接口 2.接口实现类 3.获取代理接口实现类的类 使用场景:拦截器,AOP 1.接口 public interface BookInterface { public void addBook(); } 2.接口实现类 public class Book implements BookInterf
直接贴代码了,
先理解代理是怎么回事,
然后再看动态代理

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()这个方法的介绍搞得我一直不理解动态代理是怎么实现的。

JDK的动态代理

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号