使用Spring从控制器层调用存储库和服务

我使用Spring Boot和Spring Data。

我认为将存储库层和服务层分开没有问题

所以我有我的用户存储库与CRUD方法和一些弹簧数据方法

  • 查找全部
  • 查找按用户名

我也有具有业务方法的用户服务。

  • 检查密码(字符串登录,字符串密码)
  • businessMethodAction(字符串用户名)

这是我的问题:

在我的控制器中,我必须从UserService调用方法,有时从UserRepository调用方法。目前,我将两者都注入到我的控制器中,并调用服务或存储库

@Inject
UserService userService;

@Inject
UserRepository userRepository;

@RequestMapping("{username}")
private void myMethod(@PathVariable String username){
    return userRepository.findOne(username);
}

@RequestMapping("{username}/doBusineesAction")
private void myMethod(@PathVariable String username){
    return userService.doLogicalThin(username);
}

我只是在问,因为我混淆了两者注入并在同一类中调用一个或另一个

另一方面,这意味着在这样的服务层中复制方法。

public User findOne(String username){
 return userRepository.findOne(username);
}

你怎么看?


答案 1

控制器层不应直接调用存储库。应始终使用服务层,因为服务层封装了围绕该调用的业务逻辑。仅仅因为目前没有任何业务逻辑,并不意味着你应该完全跳过该层。


答案 2

如果您的控制器不需要业务逻辑或执行单个存储库操作,则可以直接使用存储库。使用服务实现需要业务逻辑或存储库调用编排的用例。


推荐