zoukankan      html  css  js  c++  java
  • 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方法之前动态的指定,强制代理

  • 相关阅读:
    八大 IoT 安全关键技术解析
    IoT: 物联网安全测试经验总结
    业务逻辑漏洞挖掘
    从零开始Android逆向教程(二)——什么是Xposed
    Mac terminal commands
    Obj-C 实现 QFileDialog函数
    打开文件所在目录并选择该文件
    Qt样式表使用注意项
    window响应拖拽文件操作
    Window检测网络连接情况
  • 原文地址:https://www.cnblogs.com/wscit/p/6564264.html
Copyright © 2011-2022 走看看