@Transactional底层实现是SpringAOP技术,而SpringAOP技术是动态代理;
1. 静态方法;
2. 非public方法;
3. 自调用方法:即,一个类的一个方法调用自身另外一个方法,如下:
package com.cmb.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.cmb.mapper.RoleMapper;
import com.cmb.pojo.Role;
import com.cmb.service.RoleService;
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleMapper roleMapper = null;
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public int insertRole(Role role) {
return roleMapper.insertRole(role);
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public int insertRoleList(List<Role> roleList) {
int count = 0;
for(Role role : roleList){
try{
//调用自身类的方法,产生自调用问题
count+= insertRole(role);
}catch(Exception e){
e.printStackTrace();
}
}
return count;
}
}
其中 ,
//调用自身类的方法,产生自调用问题
count+= insertRole(role);
会出现此问题。

本文探讨了Spring AOP技术中@Transactional注解的使用限制,特别是针对静态方法、非public方法及自调用方法的情况。通过具体的代码示例说明了自调用方法时如何出现事务管理的问题。
1492

被折叠的 条评论
为什么被折叠?



