【发布时间】:2015-04-21 15:02:25
【问题描述】:
我正在开发一个带有 spring 框架的项目。 我有以下架构:所有数据库代码都在 dao 类中,所有应用程序逻辑都在服务类中,http 请求使用 spring mvc rest 控制器处理。
@Repository
public class UserDao {
@PersistenceContext
private EntityManager em;
public void editUser(User user) {
...
}
}
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void editUser(User user) {
...
}
}
@RestController
@RequestMapping(value = "/UserCtrl", produces = "application/json;charset=UTF-8")
public class UserCtrl {
private static final Logger logger = LogManager.getLogger(AppConfig.LOGGER_NAME);
@Autowired
private ApplicationContext appContext;
@RequestMapping(value = "/editUser")
public ActionResult editUser(@ModelAttribute User user) {
ActionResult rslt = new ActionResult();
try {
UserService userService = appContext.getBean(UserService.class);
userService.editUser(user);
rslt.setSuccess(true);
} catch (Exception ex) {
logger.error("editUser", ex);
rslt.setSuccess(false);
}
return rslt;
}
}
此代码可以正常工作。 我无法理解的一件事是当 EntityManager 仅在 UserDao 类中注入时,UserService bean 的 aop 代理如何启动事务。有人可以解释一下这是如何工作的以及 Spring 框架如何管理 EntityManager 生命周期吗?
任何帮助表示赞赏。
【问题讨论】:
标签: java spring transactions entitymanager