当前位置:首页 > CN2资讯 > 正文内容

Java动态代理学习1——静态代理

2天前CN2资讯

一、代理模式


代理模式是常用的java设计模式,特征是代理类委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。

代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 

 

按照代理的创建时期,代理类可以分为两种:

静态代理:由程序员创建或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。 
动态代理:在程序运行时运用反射机制动态创建而成。

 

 

二、单个静态代理

 

  • public interface CountDao  
  • {  
  •     // 查看账户方法  
  •     public void queryCount();  
  • }  
  •  
  • public class CountDaoImpl implements CountDao  
  • {  
  •     public void queryCount()  
  •     {  
  •         System.out.println("查看账户方法...");  
  •     }  
  • }  
  •  
  • public class CountTrancProxy implements CountDao  
  • {  
  •     private CountDao countDao;  
  •  
  •     public CountProxy(CountDao countDao)  
  •     {  
  •         this.countDao = countDao;  
  •     }  
  •  
  •     @Override 
  •     public void queryCount()  
  •     {  
  •         System.out.println("tranc start");  
  •         countDao.queryCount();  
  •         System.out.println("tranc end");  
  •     }  
  • }  
  •  
  • public class TestCount  
  • {  
  •     public static void main(String[] args)  
  •     {  
  •         CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl());  
  •         countProxy.updateCount();  
  •     }  
  • tranc start
    查看账户方法...
    tranc end

     

    三、多个静态代理

    在上面代码的基础上新增了

     

  • public class CountLogProxy implements CountDao  
  • {  
  •     private CountDao countDao;  
  •  
  •     public CountLogProxy(CountDao countDao)  
  •     {  
  •         this.countDao = countDao;  
  •     }  
  •  
  •     @Override 
  •     public void queryCount()  
  •     {  
  •         System.out.println("Log start");  
  •         countDao.queryCount();  
  •         System.out.println("Log end");  
  •     }  
  • 调用代码就变成了

     

  • //  体现了聚合的思想,代理之间的组合  
  • public static void main(String[] args)  
  • {  
  •     CountTrancProxy trancProxy = new CountTrancProxy(new CountDaoImpl());  
  •     CountLogProxy logPro = new CountLogProxy(trancProxy);  
  •     logPro.queryCount();  
  • Log start
    事务处理之前
    查看账户方法...
    事务处理之后
    Log end

     

    四、总结

    其实可以用代理类可以用继承或实现接口两种方式达到代理的效果,但是当多个代理类需要相互组合的时候,继承就不灵活了,需要不断重写代理类,而实现接口的方式就十分容易通过的聚合实现代理类之间的组合。

     

     

      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/24218.html

      分享给朋友:

      “Java动态代理学习1——静态代理” 的相关文章

      性价比VPS:高效节约的虚拟专用服务器选择指南

      在讨论性价比VPS之前,我觉得先弄清楚什么是性价比VPS特别重要。简而言之,性价比VPS是指在一定的价格范围内,提供较高的性能和稳定性的虚拟专用服务器。这类服务在近几年变得越来越受欢迎,特别是对于那些预算有限但又希望拥有高质量主机服务的人来说,性价比高的VPS就像是一道光,照亮了他们的选择之路。 性...

      VPS流媒体解锁测试:确保顺畅访问全球流媒体内容

      在如今的互联网时代,流媒体已经成为我们日常生活中不可或缺的一部分。无论是观看热门电视剧,还是播放最新的音乐视频,流媒体服务的便捷性吸引了无数用户。然而,涉及不同地区提供的内容时,依然存在一些区域限制。这时,VPS(虚拟专用服务器)流媒体解锁技术的重要性便不言而喻。 VPS流媒体解锁是指通过虚拟专用服...

      AkkoCloud评测:为中国用户打造的高性价比VPS与独立服务器解决方案

      AkkoCloud成立于2019年,作为一家具备国人运营背景的主机商,逐渐在海内外VPS和独立服务器市场中占据了一席之地。我的亲身体验让我感受到,AkkoCloud的设计初衷就是为中国大陆的用户提供一个稳健可靠的服务器解决方案。对于很多用户来说,它的出现无疑填补了国内市场的一部分空白。 回想起我探索...

      如何选择合适的IP站及其运作原理

      IP站的运作原理 在探讨IP站的运作原理之前,首先需要明确什么是IP站。简单来说,IP站是一种特殊的网络服务,它利用互联网协议(IP)提供不同的网络功能和服务。每个IP站都与一个或多个IP地址相连,能够用来访问信息、数据或应用程序。在我的网络体验中,无论是个人使用还是企业应用,IP站总是扮演着至关重...

      全面解析VPS测评:如何选择最佳虚拟专用服务器

      了解VPS(虚拟专用服务器)对许多人来说并不陌生。在我们的网络环境中,VPS作为一种重要的服务器解决方案,广泛应用于网站托管、应用开发、以及各种在线服务的支持。VPS让用户可以在共享环境中获得类似独立服务器的资源,提供了灵活性和更好的性能。与共享主机相比,VPS的显著优势在于更高的资源保障和自定义能...

      国外主机的选择指南:提升网站性能与安全性的最佳解决方案

      何谓国外主机? 国外主机,顾名思义,就是指在中国境外托管网站的服务器。随着互联网的迅速发展,越来越多的人和企业意识到使用国外主机的优势,例如更快的访问速度和更好的稳定性。我记得刚开始接触网站建设的时候,对国外主机这个概念感到有些困惑。其实,选择国外主机的背后,藏着许多让人兴奋的机会,不仅限于网站的建...