之前项目中遇到由于Mybatis缓存以及事物隔离导致的并发问题,无法拿到最新的数据,因此就将方法拆开,并将事物传播设置为了REQUIRES_NEW解决,详情看这记一次锁和事物导致的并发问题
doInsert
这个方法是没有写在接口中的,由于CGLIB的代理是基于子类的,所以当时直接使用了public
修饰符,是能够正常工作的(我们的项目SpringBoot
版本1.5,依赖4.3的Spring,默认代理方式应该是JDK+CGLIB的,但是之前有一次启动异常惊奇的发现我们的代理竟然全部是CGLIB的,最后也没排查出什么原因。)
今天突然想了下,觉得应该改成protect,于是就手写了个demo试了一下,发现事物竟然没有生效。
what???protect
方法不是可以继承给子类的么?为了验证我特意反编了一下代理类,如下:
// 被代理类的方法
protected void protec(){