当前位置: 首页 > news >正文

做一手楼盘的网站长春昆仑建设股份有限公司网站

做一手楼盘的网站,长春昆仑建设股份有限公司网站,什么网站免费可以做app,现在建网站多少钱#x1f3c6;本文收录于「滚雪球学Java」专栏#xff0c;专业攻坚指数级提升#xff0c;助你一臂之力#xff0c;带你早日登顶#x1f680;#xff0c;欢迎大家关注收藏#xff01;持续更新中#xff0c;up#xff01;up#xff01;up#xff01;#xf… 本文收录于「滚雪球学Java」专栏专业攻坚指数级提升助你一臂之力带你早日登顶欢迎大家关注收藏持续更新中upupup 前言 在Java开发中经常会使用代理模式来实现一些特殊的需求例如AOP编程、RPC调用等。Java中的代理模式主要有静态代理和动态代理两种其中静态代理需要手动编写一个代理类而动态代理则可以在运行时动态生成代理类更加灵活方便。 本文将介绍Java中的动态代理包括动态代理的实现原理、使用方法、以及动态代理实现中的常见问题和注意事项。 摘要 本文将分以下几部分介绍Java中的动态代理 动态代理的概念和实现原理。Java中的动态代理实现。动态代理的常见问题和注意事项。 内容 1. 动态代理的概念和实现原理 代理模式是一种常用的设计模式它可以在不改变原有代码的前提下实现对原有代码的扩展。代理模式主要有静态代理和动态代理两种。 在Java中静态代理需要手动编写一个代理类其中代理类需要实现与被代理对象相同的接口方法并在方法中调用被代理对象的对应方法。而动态代理则是在运行时动态生成代理类更加灵活方便。 Java中的动态代理主要使用了Java反射机制通过反射动态生成代理类并调用其中的方法。动态代理需要实现一个代理接口在运行时使用反射动态生成一个代理类该代理类实现了代理接口并在其中调用了InvocationHandler中的invoke()方法。 在Java中动态代理主要由两个类来实现java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler。其中Proxy类用于生成动态代理类对象而InvocationHandler接口则用于实现具体的代理逻辑。在使用动态代理时需要创建一个InvocationHandler对象并将其作为参数传递给Proxy.newProxyInstance()方法该方法将返回一个代理对象。 2. Java中的动态代理实现 Java中的动态代理主要使用了java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler两个类。在使用动态代理时需要创建一个InvocationHandler对象并将其作为参数传递给Proxy.newProxyInstance()方法该方法将返回一个代理对象。 下面是一个简单的示例展示了如何使用动态代理 interface Subject {void request(); }class RealSubject implements Subject {public void request() {System.out.println(RealSubject request());} }class DynamicProxy implements InvocationHandler {private Object subject;public DynamicProxy(Object subject) {this.subject subject;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(before);Object result method.invoke(subject, args);System.out.println(after);return result;} }public class Test {public static void main(String[] args) {RealSubject realSubject new RealSubject();InvocationHandler handler new DynamicProxy(realSubject);Subject subject (Subject) Proxy.newProxyInstance(handler.getClass().getClassLoader(),realSubject.getClass().getInterfaces(), handler);subject.request();} }在这个例子中我们定义了一个Subject接口和一个RealSubject类。DynamicProxy类是我们定义的代理类用于实现代理逻辑。在实现代理逻辑时我们使用了InvocationHandler接口并在其中实现了before()和after()方法用于在代理的方法执行前后进行处理。 在main()方法中我们首先创建了一个RealSubject对象然后创建了一个DynamicProxy对象将RealSubject对象传递给它。接着我们使用Proxy.newProxyInstance()方法创建了一个代理对象并将该代理对象强制转换为Subject类型。最后我们调用了代理对象的request()方法该方法会自动调用DynamicProxy中的invoke()方法从而实现了代理逻辑。 3. 动态代理的常见问题和注意事项 动态代理虽然使用灵活方便但在实现时也需要注意一些问题 基于接口的代理在Java中动态代理只能基于接口实现。如果需要基于实现类实现动态代理则需要使用字节码工具类例如ASM和CGLIB。方法调用循环问题在动态代理中如果代理对象调用了被代理对象的方法将会导致invoke()方法被重复调用从而导致死循环。为了避免这个问题我们可以在invoke()方法中判断是否为代理对象以避免调用被代理对象的方法。hashCode和equals方法的问题在动态代理中由于代理类和被代理类是两个不同的类因此它们的hashCode和equals方法会有不同的实现。如果需要在代理对象中使用hashCode和equals方法需要特别处理。 测试用例 interface Calculator {int add(int a, int b);int subtract(int a, int b); }class CalculatorImpl implements Calculator {public int add(int a, int b) {return a b;}public int subtract(int a, int b) {return a - b;} }class CalculatorProxy implements InvocationHandler {private Object target;public CalculatorProxy(Object target) {this.target target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(before);Object result method.invoke(target, args);System.out.println(after);return result;} }public class Test {public static void main(String[] args) {Calculator calculator new CalculatorImpl();InvocationHandler handler new CalculatorProxy(calculator);Calculator proxy (Calculator) Proxy.newProxyInstance(handler.getClass().getClassLoader(),calculator.getClass().getInterfaces(), handler);System.out.println(add(1, 2) proxy.add(1, 2));System.out.println(subtract(5, 3) proxy.subtract(5, 3));} }该测试用例演示了如何使用动态代理实现一个简单的计算器。其中Calculator接口定义了add()和subtract()两个方法CalculatorImpl类是真正的计算器实现类而CalculatorProxy类是代理类用于实现代理逻辑。 在测试用例中我们首先创建了一个CalculatorImpl对象然后创建了一个CalculatorProxy对象将CalculatorImpl对象传递给它。接着我们使用Proxy.newProxyInstance()方法创建了一个代理对象并将该代理对象强制转换为Calculator类型。最后我们调用了代理对象的add()和subtract()方法并输出了它们的返回值。 全文小结 本文介绍了Java中的动态代理包括动态代理的概念和实现原理、Java中的动态代理实现、以及动态代理实现中的常见问题和注意事项。动态代理可以在不改变原有代码的前提下实现对原有代码的扩展非常灵活方便。在使用动态代理时需要注意基于接口的代理、方法调用循环问题以及hashCode和equals方法的问题。 附录源码 如上涉及所有源码均已上传同步在Gitee提供给同学们一对一参考学习辅助你更迅速的掌握。 ☀️建议/推荐你 无论你是计算机专业的学生还是对编程有兴趣的小伙伴都建议直接毫无顾忌的学习此专栏「滚雪球学Java」bug菌郑重承诺凡是学习此专栏的同学均能获取到所需的知识和技能全网最快速入门Java编程就像滚雪球一样越滚越大指数级提升。 关于我 我是bug菌CSDN | 掘金 | infoQ | 51CTO 等社区博客专家历届博客之星Top30掘金年度人气作者Top4051CTO年度博主Top12华为云 | 阿里云| 腾讯云等社区优质创作者全网粉丝合计15w 硬核微信公众号「猿圈奇妙屋」欢迎你的加入免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。
http://www.zqtcl.cn/news/234333/

相关文章:

  • 建设网站策划南京网站开发建设
  • 哪些网站可以做任务挣钱如何查询企业电话号码
  • 福田网站 建设深圳信科手机 网站制作
  • 网站站内优化方案佛山外贸网站建设哪家好
  • 厦门市网站建设局平台网站如何优化
  • 电子书网站用dz还是wordpresswordpress搭建购物网站
  • 广西住房和城乡建设培训中心网站吴江住房和城乡建设部网站
  • 游戏网站的导航条怎么做的安阳县属于哪个省哪个市
  • 网站建设科目国内有多少家做网站的企业
  • 如何建立一家公司网站江苏网站推广公司
  • 城市管理如何宣传市建设网站cms软件有什么功能
  • 网站建设优势网站为什么吸引人
  • 域名如何做网站网站导读怎么做
  • 那些网站可以做问答免费设计室内装修app软件
  • 白银做网站视频制作软件下载安装
  • 商城网站建设最新报价现在网站建设的技术
  • 网站设计思路方案广东深圳软件开发公司
  • 企业网站可以免费做吗网站建设管理内容保障制度
  • 建立导购网站吴江区建设局网站
  • 东莞网站建设(信科分公司)青岛市北建设集团网站
  • 企业网站分类举例营销型网站建设市场
  • 自学app开发难吗长沙专业网站优化定制
  • 厦门做企业网站找谁wordpress4.7.10漏洞
  • 百科网站源码最好的免费logo设计网站
  • 北京做网站s如何做网站截流
  • 深圳摇号申请网站在线免费网站
  • 自己做网站用花钱吗广西建设四库一平台网站
  • 做网站建设一般多少钱做网站要买多少服务器空间
  • 天津网站优化哪家快惠民建设局网站是哪个
  • 大连做网站绍兴厂商商城网站数据库表关系设计