`
阿尔萨斯
  • 浏览: 4200880 次
社区版块
存档分类
最新评论

实现简单的动态代理!

 
阅读更多

这两天对java的动态代理感兴趣,自己写了个最简单的代码,认识一下动态代理!

例子:

类列表:

MyObjec是执行类。

MyProxy 是我自己实现的动态代理类,这个类实现了InvocationHandler接口,关于这个借口的描述就不多说了,可以参照api文档!好像动态代理类都实现这个接口,我是这么理解的,呵呵!

Test 类是我的业务类

ITest 是我业务类的接口!


  1. importjava.lang.reflect.InvocationHandler;
  2. importjava.lang.reflect.Method;
  3. importjava.lang.reflect.Proxy;
  4. publicclassMyObject{
  5. publicstaticvoidmain(String[]args){
  6. ITesttest=newTest("kimi");
  7. ITestt=newMyProxy().getProxy(test);
  8. t.outPut();
  9. }
  10. }
  11. classMyProxyimplementsInvocationHandler{
  12. privateITestitest=null;
  13. privateObjecttest=null;
  14. publicsynchronizedITestgetProxy(Objecto){//用Factory的方式取代理实例,不知道做得对不对
  15. if(itest==null){
  16. test=o;
  17. itest=(ITest)Proxy.newProxyInstance(
  18. this.getClass().getClassLoader(),
  19. o.getClass().getInterfaces(),
  20. this);
  21. returnitest;
  22. }else
  23. returnitest;
  24. }
  25. publicObjectinvoke(Objecto,Methodm,Object[]aguments)throwsThrowable{
  26. System.out.println("myProxystartok!!!");
  27. returnm.invoke(
  28. test,
  29. aguments);
  30. }
  31. }
  32. classTestimplementsITest{
  33. privateStringname=null;
  34. publicTest(Stringname){
  35. this.name=name;
  36. }
  37. publicvoidoutPut(){
  38. System.out.println("myTeststartok!!!"+String.format("%n")+"mynameis:"+this.name);
  39. }
  40. }
  41. interfaceITest{
  42. publicvoidoutPut();
  43. }

  1. 最后,如有不妥当之处,请指示~!谢谢
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics