作者:小福兄弟
博客:https://bugstack.cn
和解,分享和增长使自己和他人获得一些东西!还有什么?
我们都知道,作为程序员,如果您想学习更深入的技术,我们需要阅读大量框架源代码,在这些框架源代码中学习开发程序和设计思想,从而提高其编程能力。
每个人都知道一切,但是就实践而言,许多代码无法读取框架源代码。首先,一个非常大的问题是,面对如此庞大的框架源代码,我不知道在哪里开始。随着普通的业务需求开发,框架源代码中使用了大量的设计原理和设计模型来解剖和实施系统功能,并且还使用了许多相关技术,例如反射,代理,字节代码。
当您认为这是通常业务需求中的实例化对象调用方法,并在源代码中找到该过程时,您可能找不到何时启动呼叫,如何传递参数,将其分配给值的何处,等等。一系列问题已经驳斥了一个好的代码农民在开始学习的途中。
我不知道您是否正在研究“手写Mybatis”的过程中,有一个控制Mybatis源代码可以一起学习。如果您有比较源代码,那么当我们意识到数据源时,使用获得属性信息的可能性很高。HARD代码。如图8-1所示
如果我们需要统一设置并获得对象提供的属性的价值,那么我们需要将当前处理的对象解剖,提取其所有属性和方法,并根据不同类型遵循不同类型的属性。将其包装到工具包中。如图8-2所示
工程源代码:
Meta-Object反射工具类,属性设置和获取对象对象的操作核心类别,如图8-3所示
关于对象类中的属性值的获取和设置可以分为“ get/set”,该属性分为“ get/set”,该值分为字段字段以及普通方法的调用。为了减少用户的过度处理,可以将集中式呼叫者的实施打包到呼叫策略中。不同的实施类具有不同的统一接口策略。
定义接口
2.1 MethodInvoker源代码以获取详细信息:
2.2 GetFieldInvoker源代码以获取详细信息:
2.3 setFieldIndInvoker源代码以获取详细信息:
反射器反射器专门用于解耦对象信息。只有通过分析对象信息中包含的属性,方法和关联类,才能满足后续属性值的设置和获取。
有关详细信息,请参见源代码:
反射器反射器类提供最基本的核心功能。许多方法也是私人的。为了更方便地使用它,还需要一层包装。在元类元素中提供必要的反射,并使用反射器获得GET/SET的调用反射方法。
有关详细信息,请参见源代码:
对象包装器等同于进一步反思调用包装处理,还为不同类型的对象类型提供不同的包装策略。框架源代码喜欢使用设计模式,从不一系列IFELSE代码。
定义在对象包装设备接口中使用的更清晰的方法,包括GET/SET标准的一般方法,获取GETSET属性名称和属性类型以及添加属性。
对象包装器接口
在使用反射器,元类和对象包装器,在使用对象工厂和包装工厂中,可以组合一个完整的元对象操作类。因为使用了所有不同方法,包括:包装策略,包装工程,包装工程,包装工程,和统一的方法处理,这些处理需要一个统一的处理方,即我们的元对象是管理的。
有关详细信息,请参见源代码:
好吧,既然我们拥有实现的属性反射操作工具包,那么数据源中属性信息的设置可以更优雅。
有关详细信息,请参见源代码:
本章中的测试将分为两个部分,其中一个是对我们一章实施的反射工具类的测试。另一方面,我们将反射器工具连接到数据源的使用中,以验证使用是否平滑。
1.1创建一个库表以创建数据库名称mybatis并在库中创建用户并添加测试数据,如下所示:
1.2配置数据源
1.3配置映射器
2.1反射测试
检测结果
2.2数据源测试
检测结果
原始:https://juejin.cn/post/7098152256863731719