- 浏览: 52787 次
文章分类
最新评论
代理模式作为开发人员来讲,应该不会很陌生,它要做的事情很简单:屏蔽被调用方的实现过程。
它在一类远程过程调用中,使用得非常广泛。具体的过程呢?
调用方 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 693IO分为字节流和字符流,字符就是简单的字符串存储,从理伦上讲, ... -
Java Restful
2015-12-19 14:01 437对于两个系统之间交互信息,有两种常见的方式:webservic ... -
request.getInputStream() 只能读一次的解决方法
2015-12-17 12:17 2376我们知道request.getInputStream()只能读 ... -
java Hessian 版本冲突问题解决方法
2015-12-11 19:44 861今天在实际的项目发现了一个问题就是hessian的版本不兼容的 ... -
ThreadPoolExecutor参数讲解
2015-12-10 08:14 8141. 线程池可以节省创建多个线程带来的开销问题。 2. 线程 ... -
Java RSA 加密 解密 签名 验签
2015-12-09 10:01 61441. 加密的作用 1)明文变密文(你不知道密钥是很难解密的) ... -
Java Xstream xml 与bean之间的转换
2015-12-09 08:31 744xml文件如下: <mvc> & ... -
XPATH 解析XML
2015-12-09 08:28 4321. 表达式描述 nodename 选取此节点的所有子节 ... -
Java Dom4j 解析XML
2015-12-09 08:23 363Dom4j和JDom是很相似的,用起来十分方便。 XML文件 ... -
Java JDom 解析xml
2015-12-09 08:22 414JDOM在解析XML在代码量之上比之前的方法(DOM和SAX要 ... -
Java SAX 解析xml
2015-12-08 18:13 417在上一篇中http://gaofulai1988.iteye. ... -
Java XML解析系列
2015-12-08 18:00 749Java解析XML有多种方式,因此需要分为几个不同的系列来讲。 ... -
Java 背包算法计算从数组中找若干个数使其最接近某个数
2015-12-08 17:38 1983背包的算法的动态方式如下: f(i,w) = max{ f(i ... -
C3P0 连接分析
2015-12-01 19:05 888最近在看C3P0的原理,还是将C3P0的源码导入到Ecplis ... -
微信开发的原理
2015-11-30 10:10 1314微信在现在的生活中,扮演着举足轻重的角色,现在怎么东西都在微信 ... -
JAVA Timestamp 与Data的转化以及BigDecimal 保留两位小数
2015-11-27 14:47 16951. BigDecimal 保留两位小数 今天在项目中遇到这 ... -
java try catch finally return 继续
2015-11-27 13:45 400之前在博客中有一篇文章讨论过异常中return值的情况,有兴趣 ... -
Java JDBC executeBatch 批量操作
2015-11-27 08:05 1627对JDBC 的 CRUD操作,我相信对于每个开发人员来讲,是十 ... -
Java WeakHashMap 分析
2015-11-26 08:17 619昨天在我们的系统中看 ... -
加密与解密
2015-11-18 18:12 479我本身不是学密码出身的,但在工作中经常要使用加密与解密的东东, ...
相关推荐
在"castle IOC AOP动态代理应用"这个主题中,我们可以看到这些技术是如何协同工作的。首先,通过Castle Windsor容器管理我们的服务实例,实现依赖注入。然后,利用AOP和动态代理,我们可以为这些服务添加额外的行为...
2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic进行通信) 3: 动态代理使用到基础理论:ClassLoader 加载.class字节码文件得到 , Class对象, Class对象通过 newProxyInstance ...
- JDK动态代理和Spring AOP在实际开发中广泛应用于事务管理、缓存、日志记录等场景。 - 比如,在分布式服务环境中,代理模式可以用于实现远程调用,如RMI、Dubbo等。 6. **示例代码**: - 创建一个简单的JDK动态...
下面是一个简单的动态代理应用实例: ```java public class MyInvocationHandler implements InvocationHandler { private Object target; public MyInvocationHandler(Object target) { this.target = target;...
在这个场景中,我们将动态代理应用于自定义连接池的实现,来提高数据库访问的效率和资源管理。 首先,让我们深入理解动态代理。Java中的动态代理是通过`java.lang.reflect.Proxy`类和`java.lang.reflect....
在本篇中,我们将深入探讨Spring如何使用动态代理以及其在实际开发中的应用。 动态代理的核心概念是JDK的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类用于创建一个代理对象,...
本文将详细介绍JDK动态代理的原理与应用,帮助读者深入理解其工作方式以及如何在实际项目中运用。 #### 二、JDK动态代理简介 JDK动态代理是Java平台提供的一个工具包,用于在运行时创建代理对象。它主要适用于实现...
本篇文章将深入探讨JDK动态代理和CGLIB代理的区别,以及它们在实际应用中的选择。 首先,JDK动态代理主要依赖于java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类用于创建一个代理对象...
对于没有实现接口的类,JDK动态代理无法直接应用,此时CGLIB库就派上用场了。CGLIB库可以生成一个目标类的子类,从而实现对非接口类的代理。它通过ASM库来操作字节码生成代理类,同样可以拦截方法调用,实现类似的...
本文旨在深入探讨动态代理的概念、原理及其实现方式,并通过实例帮助读者更好地理解动态代理的应用场景与价值。 #### 二、动态代理概述 动态代理是指在运行时根据需要创建代理对象的技术。它不同于静态代理(例如...
静态代理和动态代理是两种常见的代理模式,它们在Java中有着广泛的应用,特别是在SpringBoot等框架中。本资源提供了一个简单的Java实现,适用于JDK1.8版本,并经过了验证,对初学者理解设计模式具有指导意义。 静态...
Java中的代理模式是一种设计模式,它允许我们创建一个代理类,该类代表并增强另...在实际应用中,应根据项目需求和性能考虑选择静态代理或动态代理。对于需要频繁添加或修改代理行为的场景,动态代理通常是更好的选择。
在动态代理上所做的所有调用都会被重定向到单一的调用处理器(InvocationHandler)上,调用处理器的工作是揭示调用的类型并确定相应的策略。 Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以...
标题 "JDK动态代理在EJB3(包括WebService)中的应用" 暗示了本文将探讨Java开发中的一种重要技术——JDK动态代理,以及它如何在企业级JavaBean (EJB) 3.x版本及其相关的Web服务实现中发挥作用。EJB3是Java EE平台的...
动态代理在数据编辑、过滤和选择场景中非常有用,例如在数据库应用、配置管理界面或者复杂表格数据的编辑界面中。 总结来说,通过Qt的动态代理机制,我们可以极大地增强QTableView的功能,为用户提供更直观、更...
Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...
动态代理是一种常见的设计模式,它在Java开发中广泛应用。通过动态代理,我们可以在运行时生成代理类,用于代理真实对象的方法调用。这种代理机制允许我们在不修改原始代码的情况下,对原始对象的行为进行扩展、增强...
动态代理是实现AOP的一种常见手段,尤其在Java中应用广泛。 动态代理主要分为JDK动态代理和CGLIB动态代理两种方式: 1. **JDK动态代理**: JDK动态代理基于接口实现,它通过`java.lang.reflect.Proxy`类和`java....
Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解对象获取、日志、用户鉴权、全局性异常处理、性能监控等领域。...
4. **应用场景**:AOP动态代理常用于框架开发,例如Spring AOP。Spring AOP提供了基于代理的实现,可以在不修改原始代码的情况下,为业务方法添加额外的功能。此外,它还支持基于注解的切面定义,使得AOP的使用更加...