写在前面 之前文章也说到了SPI最常见的就是JDBC,刚好现在用的就是springboot中的hikari,来看看他是怎么运用SPI思想加载特定的数据库驱动的。
正文 第一次看hikari源码,可以有这么个思路来跟踪源码:
①,找到我们最熟悉的配置中心里配置的DataSourceType,一步找到数据源,②然后找到数据源里的getConnection方法。③并且找到类里的driveClass属性,④找到它的set方法,打上断点,⑤启动项目,开始跟踪吧~,如下图
继续:
断点启动,跟踪调用栈可以看到springboot初始化配置hikari的地方
12345...
写在前面 编译完成自己的openJDK,肯定要放在实际应用中,这篇文章就记录如何用xcode进行自己openJDK的调试。
示例过程 1、编写HelloWord.java
2、编译成class文件
3、为方便调试,将class文件拷贝到openJDK的jdk目录,如下
/build/macosx-x86_64-server-slowdebug
4、打开xcode创建一个项目,然后选择macOS,创建一个命令行项目,如图:
创建完成后,删除自动生成的文件,并把openjdk的导入进来:
5、编辑Scheme
Product -> Scheme ->...
写在前面 年初自己在windows上编译了openjdk8,花费了好几天才成功。前几个月换到mac上,所有的东西都不能用,感到很可惜,所以自己只能重新编译一次。
幸好mac上编译openjdk相对于windows方便很多。不需要安装那么多插件,建议大家在Mac可以直接按照doc/build.md里的指引进行操作即可,唯一需要注意的就是各个工具版本就好。
本机各项环境配置如下:
ps:如果想编译旧版本的openjdk,前几天尝试了下,会报 找不到#include 头文件,查了很久,是因为链接时会找不到libstdc++,...
写在前面 之前看很多文章讲到class加载的双亲委派机制,百分之九十概率会提到SPI且说SPI破坏了双亲委派机制,之前也只是糊里糊涂的觉得是这么个回事,但是最近在看jvm。回过头来看,自己觉得SPI其实并没有破坏双亲委派。
双亲委派 含义:如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给父类加载器,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的启动类加载器;只有当父类加载器在其搜索范围内无法找到所需的类,并将该结果反馈给子类加载器,子类加载器会尝试去自己加载。
这里有几个流程要注意一下:
子类先委托父...
写在前面最近闲暇时间在研究jvm虚拟机原理,所以把日常看到的、学习到的记录下来,这篇文章比较简单,主要是基于上篇文章简单了解下i++和++i的区别
实例直接上代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546//sourcepublic int iinc(){ return a++; } public int inci(){ return ++a; }//classpublic in...
写在前面最近闲暇时间在研究jvm虚拟机原理,所以把日常看到的、学习到的记录下来,这篇文章主要是讲基础的Class文件的查看和解析
会持续更新,接上文
实例见注释
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108...
写在前面最近闲暇时间在研究jvm虚拟机原理,所以把日常看到的、学习到的记录下来,这篇文章主要是讲基础的Class文件的查看和解析
会持续更新
概念Class文件是经过JDK中javac工具编译后的一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符.如何查看编译后的Class文件?推荐两种不需要安装任何额外工具的查看方式.在IDE中打开.class文件,会被内置的反编译插件反编译,还原成java类文件,既不能起到查看.class文件的目的,也不符合不安装额外工具的要求.
这里使用javap命令对class文件查看
对于clas...
写在前面接上一篇
代码片段废话不多说,上代码片段
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354/** * 随便取一个拦截实现类来展示 * @author yyt */@Component@Slf4jpublic class ProjectDataAuthHandle extends DataAuthAbstractHandle { @Override protected Set<DataAuthDomain&...
写在前面做了这么多准备工作,终于可以写完之前构思的数据权限组件,接下来分几篇文章来记录下这个组件的功能和结构
结构结构图片太大,请点击一下链接下载
写在前面接上一篇,补充了第一篇最后提出解决方案中第三点的疑惑
疑惑&解答经过研究发现果然是可以对cglib的对象进行反射获取到代理的对象,如下图
所以写了个简单的工具类,废话不多说,直接上代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697/** * 获取b...