1. 首页
  2. 综合百科
  3. 鬣狗怎么发音(鬣狗术)

鬣狗怎么发音(鬣狗术)

简介:关于鬣狗怎么发音(鬣狗术)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

作者:鬣狗

时间:2021年3月6日

0.cglib介绍

cglib(字节码生成库)顾名思义,字节码生成库。Cglib本身就是一个高性能的字节码生成库。我们知道,在java中,一个类最终会被编译成一个字节码文件(class文件),然后被JVM加载到内存中,然后成为一个可用的类型。按照这种思路,我们可以在运行时组装并生成字节码,然后调用与ClassLoader相关的方法来生成一个类型以供使用。因为汇编字节码需要知道java汇编指令,这对于开发者来说是非常不友好的,所以cglib提供了一个高层API,在运行时生成新的java类型,而不考虑底层具体的字节码指令。目前Spring框架和一些ORM框架也使用cglib在运行时生成新的类型。所以对cglib有所了解,有助于理解当前主流框架的思路和源代码。

1.代理模式

为什么要说代理模式?目前在主流的web开发框架中,spring mybatis应该经常听到这些话& quot什么使用代理模式& quot;"spring代理使用CGLIB & quot;这里面有两个问题?1.为什么使用代理2。如何使用cglib?带着这两个问题继续看这篇文章。

图1代理模式

图1显示了一个简单的代理模型,它涉及三个对象主体,即参与者、代理和目标。在代理模式下,动作的发送方不直接请求目标,而是通过代理请求目标对象,然后返回结果,动作的发送方直接与代理交互。这样做的好处是,在动作发送方和目标方之间添加代理后,方法的调用和响应解耦,操作空间更大。例如,请求通过代理后,首先打印请求参数,然后请求目标。

2.Enhancer类创建代理

cglib从Enhancer类创建代理类。需要注意的一点是,cglib通过继承父类生成子类来生成代理。

图2增强器创建一个代理

如图所示,使用Enhancer类创建代理需要设置setSuperClass和回调。最后,调用enhancer.create()方法会生成一个代理,它继承了父类。需要注意的是,必须设置回调参数,否则会报错。下面介绍回调的功能。

3.Callback介绍

上面提到代理模式时,动作发送方会先请求代理,然后代理可以先做点什么,再把请求转发给目标对象,其中'代理做点什么'是回调。cglib中有六种回调,如图3所示。

图3回调

MethodInterceptor

MethodInterceptor,顾名思义,拦截方法。如图4所示,在调用parent.running()方法之前和之后执行相应的逻辑。需要注意的是,要使用proxy.invokeSuper()方法,不需要使用method.invoke(obj,args),这是对代理的递归调用,也将进入这个方法。

图4方法感受器

NoOp

NoOp是无操作的,代理层什么也不做,直接把请求传递给目标。

LazyLoader

直接看注释,意思是:返回原方法所在的对象。调用代理层方法时将调用此方法,但所有通过代理层的后续请求都将使用第一次返回的目标对象。

也就是说,无论通过代理请求多少次调用目标对象的方法,代理请求的都是LazyLoader返回的同一个目标对象。

图5LazyLoader

'

Dispatcher

功能上和LazyLoader一样,只是每次调用目标方法时,都会调用这个方法生成一个新的对象。

图6

看完LazyLoader和Dispatcher的功能,你想到什么了吗?没错,就是spring的范围,singleton和prototype,也就是singleton和prototype。是不是有点像那个?

InvocationHandler

InvocationHandler的功能和JDK代理一样,这里就不介绍了。

FixedValue

对目标方法的调用返回一个固定值。注意FixedValue的loadObject的返回值类型应该与被调用的目标方法的返回值类型一致。

图7固定值

用上面的Enhancer类设置callback生成的代理类。当通过代理请求目标时,回调作用于目标对象的所有方法。那么问题是,如果有一个非常

多方法,想为不同的方法设置不同的Callback怎么办?那就需要CallbackFilter类了。

4.CallbackFilter介绍


图8CallbackFilter

如图,CallbackFilter的作用就是维护代理类method-callback之间的映射。其中有一个实现类叫CallbackHelper。


图9CallbackHelper

CallbackHelper维护一个method到callback之间的映射,其中构造函数里面的代码就是为每一个方法生成一个callback,然后放到HashMap中,具体为方法生成callback的函数getCallback(Method)留给开发者,开发者根据自己的业务场景重写这个方法即可。


图10CallbackHelper数据结构

CallbackHelper的数据结构是,methodMap中的key是method对应的callback在callbacks中的index。

5.应用

代理方式以及cglib的应用目的是使调用者(caller)和被调用者(callee)直接的调用关系进行解耦。在目前的流行web框架spring和mybatis中都使用了cglib代理模式。在日常工作中,工程代码可能会接入一些公司的定时任务框架、或者是监控、以及其他工具,如何在不破坏工程代码的情况下优雅的解决,代理模式和cglib可以考虑一下。

6.其它

鬣狗技术社区:健康生活,深度思考,硬核技术,技术交流、答疑

github主页:
https://github.com/youngFF

git仓库地址:
https://github.com/youngFF/MyHearthStone.git

gitbook地址:
https://youngff.github.io/MyHearthStone/


欢迎各位加入鬣狗技术社区,希望能够为您提供有思考、有深度的文章。欢迎加入我们,如果你也有想法在鬣狗技术社区发表文章,头条私聊即可。


求关注➕转发➕点赞,谢谢各位!您的支持就是我们更新的动力

本文主要介绍了关于鬣狗怎么发音(鬣狗术)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/96646.html