spring动态代理与事务

(#)背景:来说一下具体的问题,业务上产品的意思是,处理这个请求不能用太多时间否则,用户就会再次触发这个请求。。。。如果采取正常的处理方式,一次没有处理完成,

用户再次点击,还是没反应,再点,,,,,,可能会造成雪崩,所以没办法,只能实现一个异步的处理流程,假装处理完了,给用户一个反馈,实际上就是给service实现一个Runanble接口,然后提交给线程池就完了,这个过程有一个坑.

(#)坑一:如果在spirng中我们不配置代理,会使用jdk代理,如果熟悉jdk代理的,可能都知道jdk代理只能针对接口进行代理,由于实现了Runnable接口,那么只能代理

这个runnable。。。。,所以下面在你获取这个bean实例的时候,在进行转型的时候,一定会抛出proxy63()$......一堆代理的错误,遇到这个问题其实主要是想明白原理

解决起来很简单,直接使用cglib代理就可以了,因为cglib代理针对的是方法而不是接口.

(#)坑二(描述):spring对于事务的处理也是建立在代理的基础上,所以会出现一个问题,就是一个类A中有a,b两个方法,b方法是一个事务的,如果B类调用A类的b方法是可以保证事务的,因为这个可以代理,但是如果A类的a方法调用b方法,这个事务就保证不了了,因为代理的是a方法,而事务是加在b方法上的

1.可以在a方法上加上事务

2.可以在a方法中调用b方法之前动态的指定,强制代理

原文地址:https://www.cnblogs.com/wscit/p/6564264.html