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

深圳石岩做网站的公司重庆建设集团公司

深圳石岩做网站的公司,重庆建设集团公司,像发微博 发wordpress,php开发一个企业网站价格这是一个非常常见的关于 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/548548/

相关文章:

  • 杭州关键词优化平台新手学seo
  • 做网站里面的内容wordpress 主题编写
  • 北师大 网页制作与网站建设技校平面设计主要做什么
  • 做网站前台和后台是什么如何做网络营销推广服务机构
  • 网站建设策划方案模板余姚网站seo运营
  • 网上购物网站设计wordpress怎么导入html
  • 微信做模板下载网站有哪些内容网络优化工程师面试题
  • 做网站赚什么钱烟台网站建设兼职
  • wordpress文章摘要显示seo公司 引擎
  • 网站建设与维护方案如何自己做app的软件
  • oj网站开发wordpress首页加音乐
  • 网站首页修改网站建设成都市
  • 新国际网站建设游戏开发网
  • 怎么搜索到自己网站一级消防工程师考试难度
  • 网站建设需要php吗上海建设工程检测网官网
  • 单位网站备案悦昂网站建设
  • 重庆网站制作公司多少钱摩托车网站建设
  • 网站可以放多少视频郑州短视频拍摄公司
  • 杨凌做网站的公司网站搬家
  • wordpress lampp建站wordpress增加会员中心
  • 网站用什么技术做的母婴网站模板
  • 网站开发工程师的工作描述上海找做网站公司好
  • 网站建设熊猫建站陕西省工程建设信息网官网
  • 招标网站平台有哪些成都专业网站建设机构
  • 如何免费制作企业网站渠道合作一站式平台
  • 统一企业官网厦门seo培训学校
  • php网站开发教程网logo设计图片免费 图案
  • 新区seo整站优化公司网站建设宣传预算
  • 网站网店建设滁州网站设计
  • 网站备案 前置审批号青海网站建设公司哪家好