你应该把它@Transactional放在DAO类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?或者注释两个"层"是否有意义?
首先,我可能会问一些之前被问过和回答的问题,但我无法获得搜索结果.好的一般(或总是到目前为止:))我们通常在服务层上定义事务注释典型的spring hibernate crud
控制器 - >经理 - >道 - >奥姆.
我现在有一种情况需要在基于客户端站点的域模型之间进行选择.假设客户端A使用我的域模型一切都很好但是其他客户端站点会给我一个Web服务而不是使用我们的域模型.
我应该替换哪一层.我相信它必须是Dao,它将从Web服务中获取数据并将其发送回来.两个单独编写的Dao图层并根据场景插入.
我现在已经意识到,当我们在服务层中放置@Transactional时,我们一直在进行紧耦合(如果有这样的事情或说没有松耦合).这么多大脑不会错,或者是他们(我对此表示怀疑).
所以问题是"应该在哪里"@Transactional"放置服务层或DAO?" 是服务层向下我应该更换.
我在Spring有休息风格控制器.在控制器中我注入了dao接口.从控制器我坚持数据.换句话说,我喜欢REST Web服务.人们发给我数据,我坚持下去.
/**
* Payment rest controller which receives
* JSON of data
*/
@Controller
@RequestMapping("/data")
public class PaymentTransaction {
@Autowired
private TestDao dao;
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody()
public String test(HttpServletRequest request) {
...
}
Run Code Online (Sandbox Code Playgroud)
目前我在Dao类中有@transaction注释.例如:
import org.springframework.transaction.annotation.Transactional;
@Component
@Transactional
public interface TestDao {
@Transactional(propagation = Propagation.REQUIRED)
public void first();
}
Run Code Online (Sandbox Code Playgroud)
我读过这是非常糟糕的风格.在stackoverflow上使用这个答案,这里有解释和示例为什么这很糟糕 - 我们不能在DAO和控制器中添加这个注释.我们必须在服务层添加它.
但我不明白什么是服务层?或者在哪里?我没有这样的东西.我应该在哪里写@Transactional注释?
最好的祝福,