- 浏览: 49748 次
文章分类
最新评论
代理模式作为开发人员来讲,应该不会很陌生,它要做的事情很简单:屏蔽被调用方的实现过程。
它在一类远程过程调用中,使用得非常广泛。具体的过程呢?
调用方 A 被调用方B
methodA(){ getResult(){
call B.getResult(); doSomething()。
} }
其实就是A远程调用B的方法。如果不想把远程调用的实现过程放在应用层面上,我只想一个简单的方法调用就行了,具体的实现我暂时不想看到,那么这里可以使用动态代理。
在Java中,动态代理是要实现InvocationHandler接口的,它里面有一个方法叫invoke(),你实现这个方法就可以了。如果不是调用远程方法就直接调用本地方法,如果是远程方法,就走http或者socket请求了,将请求的参数封闭一个对象传递过去就行了,服务器接收参数,根据参数信息调用对应的方法,将结果再传回来就ok了。是不是很简单呢?
invoke()方法在这里像一个拦截器一样,截获方法请求,然后在真正的方法前后可以加入一些逻辑控制,如远程调用封闭HTTP请求,拿回结果等等。AOP我想大家也都听过,AOP的本质上就是动态代理,在方法的前后加上一些日志输出,权限控制等等,只要明白了动态代理的精髓,我想你可以把它运用得如鱼得水。
但是Java的动态代理,它也存在一些不足之处,那就是必须要有接口存在,现在的问题来了,假设没有接口,那么可以使用动态代理么?可以,那就要使用字节码来实现了。拦截到方法后,在方法前后织入一些字节码进入就可以实现逻辑的控制了。
它在一类远程过程调用中,使用得非常广泛。具体的过程呢?
调用方 A 被调用方B
methodA(){ getResult(){
call B.getResult(); doSomething()。
} }
其实就是A远程调用B的方法。如果不想把远程调用的实现过程放在应用层面上,我只想一个简单的方法调用就行了,具体的实现我暂时不想看到,那么这里可以使用动态代理。
在Java中,动态代理是要实现InvocationHandler接口的,它里面有一个方法叫invoke(),你实现这个方法就可以了。如果不是调用远程方法就直接调用本地方法,如果是远程方法,就走http或者socket请求了,将请求的参数封闭一个对象传递过去就行了,服务器接收参数,根据参数信息调用对应的方法,将结果再传回来就ok了。是不是很简单呢?
invoke()方法在这里像一个拦截器一样,截获方法请求,然后在真正的方法前后可以加入一些逻辑控制,如远程调用封闭HTTP请求,拿回结果等等。AOP我想大家也都听过,AOP的本质上就是动态代理,在方法的前后加上一些日志输出,权限控制等等,只要明白了动态代理的精髓,我想你可以把它运用得如鱼得水。
但是Java的动态代理,它也存在一些不足之处,那就是必须要有接口存在,现在的问题来了,假设没有接口,那么可以使用动态代理么?可以,那就要使用字节码来实现了。拦截到方法后,在方法前后织入一些字节码进入就可以实现逻辑的控制了。
发表评论
-
Java IO 读文件的各种方法总结
2016-01-01 15:00 662IO分为字节流和字符流,字符就是简单的字符串存储,从理伦上讲, ... -
Java Restful
2015-12-19 14:01 393对于两个系统之间交互信息,有两种常见的方式:webservic ... -
request.getInputStream() 只能读一次的解决方法
2015-12-17 12:17 2290我们知道request.getInputStream()只能读 ... -
java Hessian 版本冲突问题解决方法
2015-12-11 19:44 818今天在实际的项目发现了一个问题就是hessian的版本不兼容的 ... -
ThreadPoolExecutor参数讲解
2015-12-10 08:14 7751. 线程池可以节省创建多个线程带来的开销问题。 2. 线程 ... -
Java RSA 加密 解密 签名 验签
2015-12-09 10:01 58641. 加密的作用 1)明文变密文(你不知道密钥是很难解密的) ... -
Java Xstream xml 与bean之间的转换
2015-12-09 08:31 691xml文件如下: <mvc> & ... -
XPATH 解析XML
2015-12-09 08:28 3961. 表达式描述 nodename 选取此节点的所有子节 ... -
Java Dom4j 解析XML
2015-12-09 08:23 326Dom4j和JDom是很相似的,用起来十分方便。 XML文件 ... -
Java JDom 解析xml
2015-12-09 08:22 359JDOM在解析XML在代码量之上比之前的方法(DOM和SAX要 ... -
Java SAX 解析xml
2015-12-08 18:13 360在上一篇中http://gaofulai1988.iteye. ... -
Java XML解析系列
2015-12-08 18:00 677Java解析XML有多种方式,因此需要分为几个不同的系列来讲。 ... -
Java 背包算法计算从数组中找若干个数使其最接近某个数
2015-12-08 17:38 1931背包的算法的动态方式如下: f(i,w) = max{ f(i ... -
C3P0 连接分析
2015-12-01 19:05 849最近在看C3P0的原理,还是将C3P0的源码导入到Ecplis ... -
微信开发的原理
2015-11-30 10:10 1275微信在现在的生活中,扮演着举足轻重的角色,现在怎么东西都在微信 ... -
JAVA Timestamp 与Data的转化以及BigDecimal 保留两位小数
2015-11-27 14:47 15941. BigDecimal 保留两位小数 今天在项目中遇到这 ... -
java try catch finally return 继续
2015-11-27 13:45 360之前在博客中有一篇文章讨论过异常中return值的情况,有兴趣 ... -
Java JDBC executeBatch 批量操作
2015-11-27 08:05 1545对JDBC 的 CRUD操作,我相信对于每个开发人员来讲,是十 ... -
Java WeakHashMap 分析
2015-11-26 08:17 576昨天在我们的系统中看 ... -
加密与解密
2015-11-18 18:12 438我本身不是学密码出身的,但在工作中经常要使用加密与解密的东东, ...
相关推荐
2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic进行通信) 3: 动态代理使用到基础理论:ClassLoader 加载.class字节码文件得到 , Class对象, Class对象通过 newProxyInstance ...
aop castle ioc 动态代理 webservice
NULL 博文链接:https://fruitking.iteye.com/blog/601106
在动态代理上所做的所有调用都会被重定向到单一的调用处理器(InvocationHandler)上,调用处理器的工作是揭示调用的类型并确定相应的策略。 Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以...
动态代理是一种常见的设计模式,它在Java开发中广泛应用。通过动态代理,我们可以在运行时生成代理类,用于代理真实对象的方法调用。这种代理机制允许我们在不修改原始代码的情况下,对原始对象的行为进行扩展、增强...
java动态代理原理剖析的demo,其中诠释了动态代理的原理,并有对应的实际应用。
- 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事背景: 小明想购买法国某个牌子的香水送给女朋友,但是在国内没有货源售卖,亲自去法国又大费周章了,而小红现在...
java 动态代理Proxy应用和底层源码分析.pdf
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。
Java动态代理的研究与应用
动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...
介绍AOP动态代理很不错的一本技术书籍,里面又很多例子通俗易懂。
* * * * JDK动态代理 JDK动态代理 JDK动态代理是通过java.lang.reflect.Proxy 类来实现的,我们可以调用Proxy类的newProxyInstance()方法来创建代理对象。对于使用业务接口的类,Spring默认会使用JDK动态代理来实现...
术解决在软件开发中OOP难以解决的问题以及提高开发效率,利用JAVA的反射机制,研究了AOP的动态代理实现原 理,说明了其可行性,体现了AOP技术应用价值和发展前景。 关键词:AOP;动态代理;横切关注点
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践 本课程要求大家对Java泛型知识有所了解,因为程序代码中大量使用了泛型相关...
Hibernate 的延迟加载本质上就是代理模式的应用,当程序通过 Hibernate 装载一个实体时,默认情况下,Hibernate 并不会立即抓取它的集合属性、关联实体所以对应的记录,而是通过生成一个代理来表示这些集合属性、...
动态代理的应用范围很广,例如:日志、事务管理、缓存等。本文将模拟@Cacheable,即缓存在动态代理中的应用进行讲解。需要注意的是,Jdk动态代理相比起cglib动态代理,Jdk动态代理的对象必须实现接口,否则将报错。...
本文介绍了动态代理为实现许多常见设计模式提供了替代的动态机制。虽然这些模式不使用动态代理,只用普通的类就能够实现,但是在...除了最关注性能的应用程序之外,动态代理方式可能比手写或机器生成stub的方式更可取。
NULL 博文链接:https://f543711700.iteye.com/blog/1172586
Android动态加载Apk-插件化技术(动态代理方案) 一. 什么是插件化 1. 主App(宿主App)加载插件apk的实现 2. 每个业务组件模块形成一个独立的Apk, 然后通过主App动态加载部署业务组件模块Apk的一种方案 二.插件化的...