为了账号安全,请及时绑定邮箱和手机立即绑定

@Transactional能标记私有方法??

视频12分钟左右,生成订单号方法是一个私有方法,打@Transactional注解起作用?事务注解不是只能对非私有方法起作用吗??而且老师您打了之后idea也不报红,我的就报红。

正在回答

1 回答

可以打在私有方法上,但是没有意义,报红的原因应该是idea设置的校验问题

transactional标签用于将对应包装的bean设置成一个新的代理bean对象供外部使用,就是说外部调用这个proxy bean的公共方法时先会调用开启事务等的切面工作,若设置成私有方法只能类内用this指针调用,这样被调用的bean是其本身,不是proxy对象,因此没有transactional切面的意义

5 回复 有任何疑惑可以回复我~
#1

浪潮之巔 提问者

多谢老师解惑!明白啦!
2018-12-25 回复 有任何疑惑可以回复我~
#2

浪潮之巔 提问者

老师,我测试了一下,外层的方法出现异常时,内层生成订单号操作也回滚了,并没有开新事物提交。无论这个方法是私有还是共有都随着外层一起回滚了。怎么回事呢?
2018-12-25 回复 有任何疑惑可以回复我~
#3

龙虾三少 回复 浪潮之巔 提问者

这是代码的失误。。。不应该定义在private方法的切面上,应该将sequence生成定义成单独的service,然后用public方法去做切面,现在的代码实现方式等于是没有用到service生成的切面
2018-12-26 回复 有任何疑惑可以回复我~
#4

浪潮之巔 提问者 回复 龙虾三少

嗯嗯,多谢老师,因为这个细节又去熟悉了事务嵌套的相关知识,的确同类内方法调用,内层方法是无法实现事务的,因为内层方法是bean本身去调的不是代理对象,所以aop切不进来事务,只能在另外一个类中定义,核心还是要通过动态代理实现事务的切面。您的课的确学到了很多,再次感谢!
2018-12-27 回复 有任何疑惑可以回复我~
#5

少年啊c 回复 龙虾三少

老师可以发下更改过的代码吗,感觉有些地方有些懵
2019-08-03 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

@Transactional能标记私有方法??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信