JDK的动态代理

编程技术  /  houtizong 发布于 3年前   101
直接贴代码了,
先理解代理是怎么回事,
然后再看动态代理

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

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客