当前位置: 首页 > news >正文

陶瓷网站制作企业网站建设协议

陶瓷网站制作,企业网站建设协议,wordpress 查询文章,福建省建设职业注册资格管理中心网站这是一个非常常见的关于 Spring 事务传播机制 的问题,核心问题是: 在同一个类中,方法 A 调用方法 B,而方法 B 上有 Transactional 注解。当调用方法 A 时,如果发生异常,方法 B 的事务会生效吗? …

这是一个非常常见的关于 Spring 事务传播机制 的问题,核心问题是:

在同一个类中,方法 A 调用方法 B,而方法 B 上有 @Transactional 注解。当调用方法 A 时,如果发生异常,方法 B 的事务会生效吗?


✅ 简短回答:

 

📌 示例代码说明

@Service
public class MyService {public void methodA() {// 做一些操作methodB();  // 内部调用methodB}@Transactionalpublic void methodB() {// 数据库操作}
}

❗️问题:

  •  

🤔 为什么事务不生效?

因为 Spring 的事务是通过 动态代理(JDK Proxy 或 CGLIB) 实现的:

  •  

✅ 如何解决这个问题?

✅ 方案一:将方法拆分到不同的类中

把 methodB() 放到另一个 Service 类中:

@Service
public class MyService {@Autowiredprivate AnotherService anotherService;public void methodA() {// 做一些操作anotherService.methodB();  // 外部调用}
}@Service
public class AnotherService {@Transactionalpublic void methodB() {// 数据库操作}
}

✅ 这样事务就会生效了。


✅ 方案二:通过 AopContext.currentProxy() 获取代理对象(慎用)

你可以通过以下方式获取当前类的代理对象来调用 methodB()

@Service
public class MyService implements ApplicationContextAware {private static ApplicationContext applicationContext;@Transactionalpublic void methodB() {// 数据库操作}public void methodA() {// 获取当前类的代理对象MyService proxy = (MyService) AopContext.currentProxy();proxy.methodB();  // 使用代理调用}@Overridepublic void setApplicationContext(ApplicationContext ctx) {applicationContext = ctx;}
}

⚠️ 注意事项:

  •  

🔁 补充:事务传播行为(Propagation Behavior)

如果你希望方法B的行为能被方法A控制,可以指定事务传播行为,例如:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {// 总是开启一个新事务
}

 

✅ 总结

场景事务是否生效说明
同一类内调用带 @Transactional 的方法❌ 不生效Spring 无法拦截内部方法调用
不同类之间调用带 @Transactional 的方法✅ 生效通过代理对象调用,事务生效
使用 AopContext.currentProxy() 调用✅ 可以生效需要设置 expose-proxy=true

 

http://www.yayakq.cn/news/602511/

相关文章:

  • 360网站卫士代备案流程网站通cms
  • 传统网站怎么换成WordPress亚马逊注册没有公司网站怎么做
  • 一汽大众网站谁做的php做网站难吗
  • 做网站用采集小白网站搭建教程
  • 网站制作书籍深圳企业有哪些
  • 有没有免费的企业网站建设网站开发工具 下载
  • wap企业网站网站开发者模式下怎么保存图片
  • 成都鱼羊环保网站制作设计东莞网络推广产品的公司吗
  • 重庆双八自助建设网站开发商不退定金找哪个部门
  • 眉山北京网站建设模板建房多少钱一平方
  • 5站合一 网站建设手机研发流程
  • 望城做网站免费做英文网站
  • 建设厅网站怎么打印不出来威海房地产网站建设
  • 重庆网站设计制作网站网站建站之后需要维护吗
  • 网站建设图片logodiscuz 手机网站模板
  • 南京网站建设网站制作茶叶网页设计图片
  • 带后台网站模板上海公司注册核名
  • 做点效果图赚钱的网站免费网站空间域名
  • 郑州网站开发技术用react和ant.d做的网站例子
  • 关于网站建设与发布的书籍wordpress论坛社区主题
  • 高端企业网站模板今天广州新增确诊最新消息
  • 手机网站有什么区别吗网站建设大约多少费用
  • 建筑工程资料网站在线旅游网站建设前的调研
  • 茂名网站优化wordpress添加下载按钮
  • 浙江省建设职业注册中心网站合同模板网站
  • 网站名称怎么收录企业seo优化方案
  • 建设vip网站相关视频下载WordPress 4.8加速
  • 如何制作一个个人网站网站视频怎么做的好处
  • 网站一个人可以做吗网站用什么语言开发
  • 深圳企业网站建设与设计制作用网页采集个人信息网站怎么做