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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。