来聊聊Spring中@Transactional事务无法正常使用的可能原因。
1. 被注解的方法必须是public方法
注解@Transactional
只能够应用于public方法之上。如果把这个注解用在一个非public的方法上面,它将被忽略。比如:
// 正确写法
@Transactional
public void save(Item item) {
itemDao.save(item);
}
// 错误写法
@Transactional
private void save(Item item) {
itemDao.save(item);
}
2. 被注解的方法必须在Spring管理的Bean中
在默认情况下,如果尝试使用Spring的事务管理器去管理一个非Spring管理的方法,你将会得到以下异常:
java.lang.NullPointerException: null (for stack trace)
因此,所有被注解的方法必须在Spring管理的Bean中。比如以下示例:
@Service
public class ItemService{
@Autowired
private ItemDao itemDao;
@Transactional
public void save(Item item) {
itemDao.save(item);
}
}
ItemService
是一个被Spring管理的Bean,它引用了ItemDao
。在ItemService
中,通过@Transactional
注解来开启事务,这样Spring就能够为该事务提供管理服务。
综上,对于@Transactional事务无法正常使用的可能原因就是以上两点,不符合上述规范可能会导致@Transactional注解无效。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:聊聊spring @Transactional 事务无法使用的可能原因 - Python技术站