Spring2.5学习4.2

阅读: 评论:0

Spring2.5学习4.2

Spring2.5学习4.2

Spring2.5学习4.2_Proxy实现动态代理(目标类实现随意接口)

静态代理的缺点是在代理类中绑定了固定的接口,不利于扩展,动态代理则不然,通过动态代理能够对不论什么实现某一接口的类进行功能性增强。

在java中动态代理由InvocationHander来实现。

HelloInterface接口

[java]  view plain copy
  1. package proxy;  
  2.   
  3. public interface HelloInterface {  
  4.     public void sayHello();  
  5. }  
实现 HelloInterface接口的类HelloInterfaceImpl
[java]
  view plain copy
  1. package proxy;  
  2.   
  3. public class HelloInterfaceImpl implements HelloInterface {  
  4.   
  5.     @Override  
  6.     public void sayHello() {  
  7.         System.out.println("Hello xianjj");  
  8.     }  
  9.   
  10. }  

proTest类实现了InvocationHandler类

package proxy;import flect.InvocationHandler;
import flect.Method;
import flect.Proxy;
// 实现InvocationHandler接口
public class proTest implements InvocationHandler {Object anyObject;// 申明bind方法public Object bind (Object anyObject){this.anyObject = anyObject;Class().getClassLoader(), Class().getInterfaces(), this);}// 重写invoke方法@Overridepublic Object invoke(Object arg0, Method arg1, Object[] args)throws Throwable {Object returnObject = null;System.out.println("动态代理開始");returnObject = arg1.invoke(anyObject, args);System.out.println("动态代理结束");return returnObject;}public static void main(String[] args) {proTest proTest = new proTest();HelloInterface helloInterfaceReturn = (HelloInterface)proTest.bind(new HelloInterfaceImpl());helloInterfaceReturn.sayHello();}
}
在main方法中调用proTest对象的bind绑定方法将一个实现类与一个动态代理进行绑定。动态代理主要由下面代码来实现

Class().getClassLoader(), Class().getInterfaces(), this);
将输入的anyObject对象与接口进行动态关联。这样就能够避免静态接口固定的缺陷了,动态代理由原来的静态代理面向接口转向动态代理面向实现类,这样设计的出发点不是对接口,而是动态的取的接口。软件的灵活性大大的提高。

当调用被代理的HelloInterfaceImpl类实例的方法时,系统将转到包括代理类proTest的InvocationHandler的invoke方法中运行对应的代码,动态代理的过程结束。

public class proTest implements InvocationHandler类不在服务于某一个接口。静态代理和动态代理都是针对于sayHello()方法进行增强,不支持field字段级的增强。

Spring觉得那已经在破坏面向对象编程的结构,所以支持方法的增强是再合适不的,并且与Spring的其它模块进行整合开发时会更有集中性。



结果:

posted on 2017-08-06 14:03 mthoutai 阅读( ...) 评论( ...) 编辑 收藏

转载于:.html

本文发布于:2024-01-29 13:00:33,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650443715463.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23