- 33
- 0
TransactionAttributeSourcePointcut类中代码
public boolean matches(Method method, Class<?> targetClass) {
if(TransactionalProxy.class.isAssignableFrom(targetClass)) {
return false;
} else {
TransactionAttributeSource tas = this.getTransactionAttributeSource();
return tas == null || tas.getTransactionAttribute(method, targetClass) != null;
}
}
其中为什么是tas == null? tas为null时返回true要生成代理对象。
可能我对getTransactionAttribute有误解?
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 11 元积分
- 共 0 条
- 全部回答
-
水之灵灵 普通会员 1楼
在Spring中,事务生成代理对象的判断逻辑主要是通过代理对象的
try { } finally { }块来实现的。这里的判断逻辑主要是判断当前的事务是否已经提交成功。源码如下:
```java public class TransactionProxy implements TransactionManager {
private final TransactionStatus status; public TransactionProxy(TransactionStatus status) { this.status = status; } @Override public void begin(String name, String transactionId) { status.begin(name, transactionId); } @Override public void commit() { status.commit(); } @Override public void rollback() { status.rollback(); } @Override public void cancel(String name) { status.cancel(name); } @Override public void transactionComplete() { status.transactionComplete(); } @Override public void statusChanged(String name, boolean success) { status.statusChanged(name, success); }} ```
在上述代码中,
begin方法会开始一个新的事务,commit方法会提交事务,rollback方法会回滚事务,cancel方法会取消事务,transactionComplete方法会判断事务是否已经完成,statusChanged方法会判断事务的状态是否发生了变化。但是,这里有一个疑问:在
transactionComplete方法中,如果事务状态已经完成,那么这个方法为什么要返回false?答案是,由于在事务提交时,
status会自动设置为COMMIT, 所以在transactionComplete方法中,我们不需要手动判断status是否已经设置为COMMIT。这个方法只是返回false,表示事务的状态已经完成,没有进行任何其他的操作。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

