java 动态代理
2016-06-17 01:38
423 查看
http://blog.csdn.net/mhmyqn/article/details/48474815#comments
http://blog.csdn.net/luanlouis/article/details/24589193#comments
动态代理工作的基本模式就是将自己的方法功能的实现交给 InvocationHandler角色,外界对Proxy角色中的每一个方法的调用,Proxy角色都会交给InvocationHandler来处理,而InvocationHandler则调用具体对象角色的方法。如下图所示:
在面向对象的编程之中,如果我们想要约定Proxy 和RealSubject可以实现相同的功能,有两种方式:
a.一个比较直观的方式,就是定义一个功能接口,然后让Proxy 和RealSubject来实现这个接口。
b.还有比较隐晦的方式,就是通过继承。因为如果Proxy 继承自RealSubject,这样Proxy则拥有了RealSubject的功能,Proxy还可以通过重写RealSubject中的方法,来实现多态。
在这种模式之中:代理Proxy 和RealSubject 应该实现相同的功能,这一点相当重要。(我这里说的功能,可以理解为某个类的public方法)
JDK 动态代理是在程序运行过程中,根据被代理的接口来动态生成代理类的class文件。相关的两个类:
interface InvocationHandler
Object invoke(Object proxy,Method method,Objects[] args)
Class Proxy
JDK 提供 java.lang.reflect.Proxy类来实现动态代理,通过
对于代理的接口的实际处理是 java.lang.reflect.InvocationHandler,他提供了一个 invoke方法供是实现者提供相应的代理逻辑的实现。
所有的方法功能的实现都统一调用了InvocationHandler的invoke()方法。
http://blog.csdn.net/luanlouis/article/details/24589193#comments
动态代理工作的基本模式就是将自己的方法功能的实现交给 InvocationHandler角色,外界对Proxy角色中的每一个方法的调用,Proxy角色都会交给InvocationHandler来处理,而InvocationHandler则调用具体对象角色的方法。如下图所示:
在面向对象的编程之中,如果我们想要约定Proxy 和RealSubject可以实现相同的功能,有两种方式:
a.一个比较直观的方式,就是定义一个功能接口,然后让Proxy 和RealSubject来实现这个接口。
b.还有比较隐晦的方式,就是通过继承。因为如果Proxy 继承自RealSubject,这样Proxy则拥有了RealSubject的功能,Proxy还可以通过重写RealSubject中的方法,来实现多态。
在这种模式之中:代理Proxy 和RealSubject 应该实现相同的功能,这一点相当重要。(我这里说的功能,可以理解为某个类的public方法)
JDK 动态代理是在程序运行过程中,根据被代理的接口来动态生成代理类的class文件。相关的两个类:
interface InvocationHandler
Object invoke(Object proxy,Method method,Objects[] args)
Class Proxy
JDK 提供 java.lang.reflect.Proxy类来实现动态代理,通过
Object newProxyInstance(ClassLoader loader,Class<?>interface,InvocationHandler h)生成代理对象,它会与代理对象关联,当请求分发到代理对象后,会自动执行h.invoke() 方法;
对于代理的接口的实际处理是 java.lang.reflect.InvocationHandler,他提供了一个 invoke方法供是实现者提供相应的代理逻辑的实现。
所有的方法功能的实现都统一调用了InvocationHandler的invoke()方法。
相关文章推荐
- [Java] JavaMail 发送 html 格式、带附件的邮件
- Dubbo与Zookeeper、SpringMVC整合和使用
- 使用eclipse+Maven部署Servlet3.0Web时的一个问题
- 从Struts2访问web元素理解IOC
- java中的四种引用类型
- No_0616 Java进阶学习——Java注解学习
- Java 可变参数
- Spring Boot
- Web开发笔记(3):Eclipse中调整JSP字体大小
- java实现ssl单/双向认证通信[推荐]
- Java开发中的23种设计模式详解
- Java 7 的7个新特性
- Java类加载原理解析
- java基础二(阅读Head First Java记录)
- 博客第三天-java基础简介
- java heap dump
- SpringMVC 中设置日期字符串转换格式
- Please allow Subclipse team to receive的弹窗问题
- Struts2基础--Struts2(你必须要懂得基础)
- Spring MVC