gpt4 book ai didi

java - 如何将Service/Controller层类拆分为interface和impl?

转载 作者:行者123 更新时间:2023-12-02 10:47:20 29 4
gpt4 key购买 nike

我的 Spring boot 项目中有以下 Controller 类,分为接口(interface)和实现:

public interface UserAccountController {

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestBody UserAccountEntity account,
HttpServletResponse response) throws IOException;

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String create(@Valid @RequestBody UserAccountEntity userAccount,
HttpServletResponse response, BindingResult result);

}

@RestController
@RequestMapping("/api/authentication")
public class UserAccountControllerImpl implements UserAccountController {

@Autowired
private UserAccountService userAccountService;

@Override
public String login(@Valid @RequestBody UserAccountEntity account,
HttpServletResponse response) throws IOException {
//...
}

@Override
public String create(@Valid @RequestBody UserAccountEntity userAccount,
HttpServletResponse response, BindingResult result) {
//....
}
}

当我将 RestController 和 RequestMapping 注解移动到界面时,它不起作用。但是在接口(interface)上注释方法是可行的。这两个注释有何不同?

最佳答案

@RestController 继承自 @Controller,而 @Controller 又继承自 @Component,从而导致在应用程序上下文中创建 Spring Bean。

@RequestMapping 继承自 @Mapper,用于将 Rest- 或 Web-Controller 方法标记为处理程序方法。

至于为什么 Spring 的实现不允许第一个继承而允许第二个继承,我只能推测:

  • 我认为您的示例构成了 @Mapping 继承的有用用例,因为您可以拥有多个具有不同 url 前缀的 RestController,但除此之外具有相同的端点。
  • 使 @Component 注解可继承可能会导致非自愿创建 Spring Bean,因为客户端在实现接口(interface)时可能无法注意到该注解。

关于java - 如何将Service/Controller层类拆分为interface和impl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52455268/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com