Java动态代理的应用
来源:互联网 发布:星野娜美 知乎 编辑:程序博客网 时间:2024/06/05 05:26
先看一下代理模式,类图(如果要深究java代理是模式,设计的原理比较复杂,建议参考相关书籍和文章,这里不展开阐述)
代理模式最大的特点就是代理类和实际业务类实现同一个接口(或继承同一父类),代理对象持有一个实际对象的引用,外部调用时操作的是代理对象,而在代理对象的内部实现中又会去调用实际对象的操作
Java动态代理其实内部也是通过Java反射机制来实现的,即已知的一个对象,然后在运行时动态调用其方法,这样在调用前后作一些相应的处理,这样说的比较笼统,举个简单的例子
比如我们在应用中有这样一个需求,在对某个类的一个方法的调用前和调用后都要做一下日志操作,
一个普通的接口
- public interface AppService {
- public boolean createApp(String name);
- }
该接口的默认实现类
- public class AppServiceImpl implements AppService {
- public boolean createApp(String name) {
- System.out.println("App["+name+"] has been created.");
- return true;
- }
- }
日志处理器
- public class LoggerInterceptor implements InvocationHandler {//注意实现这个Handler接口
- private Object target;//目标对象的引用,这里设计成Object类型,更具通用性
- public LoggerInterceptor(Object target){
- this.target = target;
- }
- public Object invoke(Object proxy, Method method, Object[] arg)
- throws Throwable {
- System.out.println("Entered "+target.getClass().getName()+"-"+method.getName()+",with arguments{"+arg[0]+"}");
- Object result = method.invoke(target, arg);//调用目标对象的方法
- System.out.println("Before return:"+result);
- return result;
- }
- }
外部调用
- public class Main {
- public static void main(String[] args) {
- AppService target = new AppServiceImpl();//生成目标对象
- //接下来创建代理对象
- AppService proxy = (AppService) Proxy.newProxyInstance(
- target.getClass().getClassLoader(),
- target.getClass().getInterfaces(), new LoggerInterceptor(target));
- proxy.createApp("Kevin Test");
- }
- }
0 0
- Java动态代理的应用
- Java动态代理的应用
- Java动态代理应用
- Java 动态代理 应用
- JAVA动态代理的原理及应用
- Java代理模式 动态代理 的应用场景
- 代理模式-Java动态代理的实现及应用
- Java代理模式 动态代理 的应用场景
- 动态代理的应用
- 动态代理应用场景 Java
- Java动态代理简单应用
- Android Java 动态代理应用
- Java的动态代理
- JAVA的动态代理
- java的动态代理
- java的动态代理
- JAVA的动态代理
- JAVA的动态代理
- 树梅派应用20:树莓派GPIO入门08-使用74HC595芯片驱动数码管(一)
- 【江南】微信小程序从0到1-整体框架
- 用递归求数组全排列(java)
- 迅雷极速版 win10 奔溃、闪退,官方补丁无法安装解决办法
- windows 下的caffe- 生成自己的数据集,并训练测试
- Java动态代理的应用
- 树梅派应用22:树莓派 SAKS 扩展板实用应用 之 DS1307 RTC 时钟模块
- CH9,p175全选,反选
- poj1741Tree
- 驱动复习(mor8)
- childNodes和nodeType
- 102. Binary Tree Level Order Traversal*
- Listener基础知识(一)
- 进程与线程