在默认情况下,大部分使用spring的事务都是使用代理的模式,代理实现的事务有一定的局限性:仅有在公有方法上标记的@Transactional有效;仅有外部方法调用过程才会被代理截获,事务才会有效,也就是说,一个方法调用本对象的另一个方法,没有通过代理类,事务也就无法生效。下面来说明下解决的方法
1.首先描述下类内部方法互相调用,事务不生效的情况
UserService测试接口类
package cn.sw.study.web.service;
/**
- Created by shaowei on 2017/4/26.
*/
public interface UserService {
void addInfo();
void addOne();
}
2.解决@Transactional事务在类内部方法调用不生效
UserServiceImpl测试实现类
package cn.sw.study.web.service.impl;
import cn.sw.study.web.dao.UserMapper;
import cn.sw.study.web.model.User;
import cn.sw.study.web.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Dat