【mybatis源码学习】mybtias基础组件-反射工具
一、JavaBean的规范
类中定义的成员变量也称为字段,属性则是通过getter/setter方法得到的,属性只与类中的方法有关,与是否存在对应成员变量没有关系。
属性的getter/setter方法与同名的字段,常常是一起出现。但还是有必要区分他们是两个概念。
例如:getA方法和setA(String)方法,无论类中是否定义了字段String a,我们都认为类中存在属性a.
二、mybatis的反射类型
- 1、org.apache.ibatis.reflection.Reflector
- 对Class做一些反射的操作。
具有缓存的特性,提升运行效率。
比如:setter/getter方法,属性。- 2、org.apache.ibatis.reflection.ReflectorFactory,org.apache.ibatis.reflection.DefaultReflectorFactory
- 对class对象生成Reflector
工厂模式- 3、org.apache.ibatis.reflection.TypeParameterResolver
- 获取javaBean中的属性的java类型
获取javaBean的Method的参数类型和返回类型
- 4、org.apache.ibatis.reflection.factory.ObjectFactory,org.apache.ibatis.reflection.factory.DefaultObjectFactory
- mybatis根据class创建对象的工厂类
- 5、org.apache.ibatis.reflection.MetaClass
- 对Reflector,和ReflectorFactory封装
主要是解决对类级别的元信息的操作- 6、org.apache.ibatis.reflection.wrapper.ObjectWrapper
- ObjectWrapper接口是对对象的包装,抽象了对象的属性信息。
它定义了一系列查询对象属性信息的方法。- 7、org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory,org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory
- 对对象的包装
- 8、org.apache.ibatis.reflection.MetaObject
- ObjectWrapper提供了获取/设置对象中指定的属性,检测getter/setter等常用功能。
但是ObjectWrapper只是这些功能的最后一站,我们省略了对属性表达式解析过程的介绍。而该解析过程是在MetaObject中实现的。
【mybatis源码学习】mybtias基础组件-反射工具的更多相关文章
- mybatis源码学习:一级缓存和二级缓存分析
目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCa ...
- mybatis源码学习:基于动态代理实现查询全过程
前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 下面这条语句,将会调用代理对象的方法,并执行查询过程,我们一 ...
- Mybatis源码学习第六天(核心流程分析)之Executor分析
今Executor这个类,Mybatis虽然表面是SqlSession做的增删改查,其实底层统一调用的是Executor这个接口 在这里贴一下Mybatis查询体系结构图 Executor组件分析 E ...
- mybatis源码学习(一) 原生mybatis源码学习
最近这一周,主要在学习mybatis相关的源码,所以记录一下吧,算是一点学习心得 个人觉得,mybatis的源码,大致可以分为两部分,一是原生的mybatis,二是和spring整合之后的mybati ...
- mybatis源码学习:插件定义+执行流程责任链
目录 一.自定义插件流程 二.测试插件 三.源码分析 1.inteceptor在Configuration中的注册 2.基于责任链的设计模式 3.基于动态代理的plugin 4.拦截方法的interc ...
- Mybatis源码学习之整体架构(一)
简述 关于ORM的定义,我们引用了一下百度百科给出的定义,总体来说ORM就是提供给开发人员API,方便操作关系型数据库的,封装了对数据库操作的过程,同时提供对象与数据之间的映射功能,解放了开发人员对访 ...
- MyBatis源码分析(各组件关系+底层原理
MyBatis源码分析MyBatis流程图 下面将结合代码具体分析. MyBatis具体代码分析 SqlSessionFactoryBuilder根据XML文件流,或者Configuration类实例 ...
- Mybatis源码学习第八天(总结)
源码学习到这里就要结束了; 来总结一下吧 Mybatis的总体架构 这次源码学习我们,学习了重点的模块,在这里我想说一句,源码的学习不是要所有的都学,一行一行的去学,这是错误的,我们只需要学习核心,专 ...
- mybatis源码学习(三)-一级缓存二级缓存
本文主要是个人学习mybatis缓存的学习笔记,主要有以下几个知识点 1.一级缓存配置信息 2.一级缓存源码学习笔记 3.二级缓存配置信息 4.二级缓存源码 5.一级缓存.二级缓存总结 1.一级缓存配 ...
随机推荐
- Player Settings 导出设置
Player Settings is where you define various parameters (platform specific) for the final game that y ...
- 【原创】<Debug> “duplicate connection name”
[Problem] duplicate connection name [Solution] 在Qt上使用SQLite的时候,如果第二次使用QSqlDatabase::addDatabase()方式时 ...
- MariaDB Role
一.MariaDB Role介绍 MariaDB从10.0/10.1版本开始支持role. Role相当于各种权限的集合,可以给多个账户统一权限的修改直接通过修改role来实现,不需要每个账户一个一个 ...
- :状态模式:GumballMachine
#ifndef __STATE_H__ #define __STATE_H__ #include <iostream> #include<stdlib.h> using nam ...
- Java 将图片转成base64,传到前台展示
后台代码: public String getBase64(SysFile sysFile){ String imgStr = ""; try { File file = new ...
- 查看linux 内核版本信息
uname -r2.6.32-696.el6.x86_64uname -ix86_64
- div 内 图片 垂直居中
vertical-align属性适用于 line-block: <div class="title"> <img src="img_p1_title.p ...
- leetcode第15题:三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...
- 使用zabbix-java-gateway可以通过该网关来监听多个JVM
我们知道监控主机和网络性能指标情况可以使用zabbix很好解决,分析起来也很方便,Zabbix主要功能: - 自动发现服务器与网络设备 - 分布式监视以及WEB集中管理功能 - 可以无agent监视 ...
- ios 拉伸图片和计算文字的大小
一.拉伸图片 /** * 传入图片的名称,返回一张可拉伸不变形的图片 * * @param imageName 图片名称 * * @return 可拉伸图片 */ + (UIImage *)resiz ...