反射调用事务方法导致事务失效
本文部分作废,可以使用反射调用事务方法,但是需要Invoke的Object不同,参考新文章
不能使用反射方法去调用加了Transactional注解的方法,不然事务会失效
我为什么会作死以及我怎么作死的
在文章SpringMVC和Spring配置冲突的文章的假设中,我的Web层采用了这样一种作死的方式调用Service层
- 因为存在模型转换,我有好多个函数要写,又没有人帮我写,每次复制粘贴好烦
- 所有函数有都是一样多参数,仅仅是函数名不同
我就作死的使用同一个反射函数,传入不同的Key,Key=函数名,来调用Service这些函数,类似
1 | @Autowired |
然而在Service层的 serviceInsertMethod 是如何实现的呢
1 | @Override |
我作死中遇到了什么问题(此处有误)
有对Spring事务有一定了解的人都知道其实现原理是JDK的动态代理,如果某方法被加了注解,那么 ReflectUtil.invokeMethod 中得到一个名为Proxy@XXX的动态代理类,而不是 SomeService 类本身
参考如何从动态代理中取Target中我们可以知道,如果想用反射方法获得Method(例如serviceInsertMethod)和Field必须取出Target(例如SomeService)
Spring为了帮你完成事务给你加了动态代理,你为了使用反射给它拆开了,Spring就不能帮你进行事务管理了啊!!!!!
解决方法(此处有误)
呃。。。没有找到,所以调用有@Transactional的方法,还是老老实实的调用吧
1 | public void insert(ObjectReqVO objectReqVO) { |