Java中什么是代理,java如何实现代理机制

  Java中什么是代理,java如何实现代理机制

  代理是一种设计模式,它提供了另一种访问目标对象的方式。也就是说,目标对象是通过代理对象访问的。这样做的优点是,在实现目标对象的基础上,可以增强附加的功能操作,也就是说,可以扩展目标对象的功能。

  如何解决写爬虫IP受阻的问题?立即使用。

  这里有一个用在编程上的思路:不要随意修改别人已经写好的代码或者方法。如果需要修改,可以通过代理来扩展方法。

  我们举个例子来说明代理的作用:假设我们要请一个明星,那么我们不直接联系明星,而是联系明星的经纪人来达到同样的目的。明星是一个目标对象,他只需要在活动中负责节目,其他琐事都留给他的经纪人(代理人)去解决。这是现实中代理思想的一个例子。

  代理模式的关键点是代理对象和目标对象。代理对象是目标对象的扩展,将调用目标对象。

  静态代理

  使用静态代理时,需要定义接口或父类,代理对象和代理对象实现同一个接口或继承同一个父类。

  这里有一个例子来解释:

  模拟动作,定义一个保存动作的接口:IUserDao.java,然后目标对象实现这个接口的方法UserDao.java。此时,如果使用静态代理模式,则需要在代理对象(UserDaoProxy.java)中实现IUserDao接口。调用时,通过调用代理对象的方法来调用目标对象。

  注意,代理对象和目标对象应该实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。

  静态代理总结:

  1.您可以扩展目标功能,而无需修改目标对象的功能。

  2.缺点:

  因为代理对象需要实现和目标对象相同的接口,所以会有很多代理类,类太多了。同时,一旦方法被添加到接口中,目标对象和代理对象都应该被维护。

  静态代理的缺点怎么解决?答案是可以使用动态代理。

  动态代理

  动态代理有以下特点:

  1.代理对象,不需要实现接口。

  2.代理对象的生成是利用JDK的API在内存中动态构建代理对象(我们需要指定创建代理对象/目标对象的接口类型)。

  3.动态代理也称为JDK代理和接口代理。

  总结:

  代理不需要实现接口,但是目标对象必须实现接口,否则不能使用动态代理。

  Cglib代理

  上述静态代理和动态代理模式要求目标对象是实现接口的目标对象,但有时目标对象只是不实现任何接口的单个对象。这时,你可以使用子类化目标对象的方法来实现代理。这种方法称为Cglib代理。

  Cglib代理,也叫子类代理,在内存中构建一个子类对象,扩展目标对象的功能。

  JDK的动态代理有一个限制,即使用动态代理的对象必须实现一个或多个接口。如果想代理不实现接口的类,可以用Cglib实现。Cglib是一个强大的高性能代码生成包,可以在运行时扩展java类和实现java接口。它被很多AOP框架广泛使用,比如Spring AOP和synaop。拦截Cglib包的底层,为它们提供了方法,就是通过使用一个小而块的字节码处理框架ASM来转换字节码,生成新的类。不鼓励直接使用ASM,因为这需要你熟悉JVM的内部结构,包括类文件的格式和指令集。

  Cglib子类代理实现方法:

  1.需要导入cglib的jar文件,但是Spring的核心包已经包含Cglib函数,直接导入Spring-core-3 . 2 . 5 . jar就可以了。

  2.引入函数包后,可以在内存中动态构建子类。

  3.代理的类别不能是最终的,否则将会报告错误。

  4.如果目标对象的方法是final/static,则不会被拦截,即不会执行目标对象的附加业务方法。以上是java中什么是代理模式的细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • java从文件中读取数据的六种方法是什么,java如何从文件中读取数据
  • java从文件中读取数据的六种方法是什么,java如何从文件中读取数据,java从文件中读取数据的六种方法
  • java 获取当前时间的三种方法是什么,java如何获取当前的时间
  • java 获取当前时间的三种方法是什么,java如何获取当前的时间,java 获取当前时间的三种方法
  • java 实体转map,实体对象转map,Java如何实现实体类转Map、Map转实体类
  • ,,Java如何基于wsimport调用wcf接口
  • javaarraylist用法,java如何遍历arraylist
  • java如何将两个数组合并为一个数组,合并数组算法
  • java如何编写函数,Java方法怎么写
  • java定位系统怎么做,java如何定位线上问题
  • Java如何打包为apk,java如何打包jar包_1
  • 如何判断char是不是空格,java如何判断字符是不是空格
  • java面向对象菜鸟教程,java如何面向对象
  • java如何换行输入,java输出语句中怎么换行
  • 顺时针打印二维数组java,java如何输出一个二维数组
  • 留言与评论(共有 条评论)
       
    验证码: