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

Java静态代理、动态代理实例

3天前CN2资讯


采用Java代理模式,代理类通过调用委托类对象的方法,来提供特定的服务。委托类需要实现一个业务接口,代理类返回委托类的实例接口对象。

按照代理类的创建时期,可以分为:静态代理和动态代理。

所谓静态代理: 指程序员创建好代理类,编译时直接生成代理类的字节码文件。

所谓动态代理: 在程序运行时,通过反射机制动态生成代理类。

 

一、静态代理类实例:

1、Serivce.java

 


Java代码 

1. package 2. 3. /** 4. * 定义一个服务接口 5. * @author IBM 6. */ 7. public interface 8. 9. /** 10. * 查询日期 11. */ 12. public 13. /** 14. * 计算两个整数之差 15. */ 16. public int sub(int a, int 17. }

2、ServiceImpl.java

 


Java代码 

1. package 2. 3. import 4. 5. /** 6. * 委托类需要实现服务接口(必须) 7. * @author IBM 8. */ 9. public class CountImpl implements 10. 11. @Override 12. public 13. return new 14. } 15. 16. @Override 17. public int sub(int a, int 18. return 19. } 20. 21. public void 22. "It's my own method"); 23. } 24. }


3、ServiceProxy.java

 

 


Java代码 

1. package 2. 3. import 4. import 5. 6. /** 7. * @author IBM 8. * 静态代理类 9. */ 10. public class SerivceProxy implements 11. private 12. 13. public 14. this.countImpl = countImpl; 15. } 16. 17. @Override 18. public 19. return 20. } 21. 22. @Override 23. public int sub(int a, int 24. return 25. } 26. 27. public void 28. "It's my own method"); 29. } 30. }

4、ServiceTest.java(测试类)

 

 


Java代码 

1. package 2. 3. import 4. import 5. 6. public class 7. 8. /** 9. * @param args 10. */ 11. public static void 12. //创建委托类实例,即被代理的类对象 13. new 14. //创建静态代理类 15. new 16. String date = proxy.queryDate(); 17. System.out.println(date); 18. int result = proxy.sub(10, 20); 19. "10-20 = "+result); 20. proxy.ownMethod(); 21. } 22. }


静态代理类的特点: 代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。而且代理类只能为特定的接口(Service)服务。

 


动态代理实例:

3、ServiceProxy.java

 


Java代码 

1. package 2. 3. import 4. import 5. import 6. 7. public class ServiceProxy implements 8. 9. private 10. 11. public 12. this.target = target; 13. } 14. 15. @Override 16. public 17. throws 18. null; 19. result = method.invoke(target, args); 20. return 21. } 22. 23. /** 24. * @param target 25. * @return 返回委托类接口的实例对象 26. */ 27. public 28. return 29. this); 30. } 31. }

4、ServiceTest.java(测试类)

 

 


Java代码 

1. package 2. 3. import 4. import 5. import 6. 7. public class 8. 9. /** 10. * @param args 11. */ 12. public static void 13. //创建委托类实例,即被代理的类对象 14. new 15. //创建动态代理类 16. new 17. Service service = (Service) proxy.getProxyInstance(); 18. String date = service.queryDate(); 19. System.out.println(date); 20. int result = service.sub(10, 20); 21. "10-20 = "+result); 22. } 23. }

 

动态代理: 代理类需要实现InvocationHandler接口。

使用场合举例: 如果需要委托类处理某一业务,那么我们就可以先在代理类中,对客户的权限、各类信息先做判断,如果不满足某一特定条件,则将其拦截下来,不让其代理。

 

修改两个方法,做测试:

ServiceImpl.java

 


Java代码 


1. public 2. "It's my own method"); 3. return "user"; 4. }

 

ServiceProxy.java

 


Java代码 

1. @Override 2. public 3. throws 4. null; 5. if(!(target instanceof 6. "不能代理该对象"); 7. return 8. else if(!((ServiceImpl)target).ownMethod().equals("admin")){ 9. "权限不够"); 10. return 11. } 12. result = method.invoke(target, args); 13. return 14. }
    你可能想看:

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

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

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

    分享给朋友:

    “Java静态代理、动态代理实例” 的相关文章

    如何使用Luminati(Bright Data)代理服务获取数据与保护隐私

    Luminati(Bright Data)概述不仅体现了其代理服务的强大与全面,还带领我们了解这一行业的演变与发展。作为全球最大的住宅代理服务提供商,Luminati(现被称为Bright Data)凭借其超过720万个真实用户IP,突显了自身在代理市场中的领先地位。您可能会想,为什么会有如此多的I...

    GIA VPS服务器:高速稳定的理想选择及价格性能分析

    GIA VPS服务器概述 在选择服务器时,GIA VPS服务器越来越受到关注。我之前在寻找合适的VPS时,了解到GIA VPS是一个非常不错的选择。它采用了CN2 GIA线路,提供了高效、稳定的网络连接。对我来说,网络的速度和稳定性是使用服务器的关键因素,而GIA VPS服务器在这两个方面表现都很优...

    什么是VPS?探索虚拟专用服务器的独立性与灵活性

    在现代互联网环境中,VPS(虚拟专用服务器)是许多人所关注的一个话题。它通过虚拟化技术,将一台物理服务器切割成多个独立的虚拟服务器。每个VPS都能独立运行自己的操作系统,拥有专属的内存、磁盘空间和带宽。这种设计让VPS在很多方面都表现得尤为出色,适合各种需求。 简单来说,VPS就像在一台大房子里有多...

    如何优雅退出ping -t命令:实用技巧与方法指南

    在当今的网络世界里,许多人时常需要检查网络连通性。这个时候,'ping'命令就显得非常实用。简单来说,'ping'命令的主要作用是检测与特定目标主机之间的连接状态。通过发送ICMP回显请求,它可以告诉我们目标设备是否可达,延迟情况如何等信息。 在众多的‘ping’命令中,‘ping -t’是特别常用...

    甲骨文云免费套餐与ARM CPU优势解析

    甲骨文云(Oracle Cloud)是一个强大的云服务平台,近年来受到了越来越多用户的关注。我自己也曾经探索过这个平台,在这里我想和大家聊聊甲骨文云的免费套餐,这对中小企业以及开发者来说真的是一个不错的选择。免费的套餐不仅简化了入门程序,也为新用户提供了足够的资源来尝试不同的云服务。 甲骨文云的免费...

    VPS论坛:虚拟主机爱好者的交流与学习平台

    VPS论坛概述 VPS论坛是一个专为VPS主机爱好者提供交流与分享的平台。在这里,像我这样对VPS感兴趣的人们,可以参与关于虚拟专用服务器的各种讨论。VPS实际上属于一个相对小众的领域,因此知名的VPS论坛数量较少,但它们所承载的信息和交流却是丰富多彩的。这些论坛不仅是获取信息的重要来源,更是与其他...