Java 如何将服务/控制器层类拆分为接口和impl?
我的Spring boot项目中有以下控制器类,分为接口和实现:Java 如何将服务/控制器层类拆分为接口和impl?,java,spring-boot,Java,Spring Boot,我的Spring boot项目中有以下控制器类,分为接口和实现: public interface UserAccountController { @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(@RequestBody UserAccountEntity account, HttpServletResponse response) th
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注释移动到接口时,它不起作用。但是在接口上注释方法是可行的。这两个注释有何不同
@RestController
继承自@Controller
,后者继承自@Component,从而在应用程序上下文中创建Springbean
@RequestMapping
继承自@Mapper
,用于将Rest或Web控制器方法标记为处理程序方法
至于为什么Spring在第一个方面不允许继承,而在第二个方面允许继承,我只能推测:
- 我认为您的示例为
继承提供了一个有用的用例,因为您可以有多个具有不同url前缀的RESTController,但除了相同的端点之外李>@Mapping
- 使
注释可继承可能会导致非自愿创建Springbean,因为客户端在实现接口时可能没有注意到注释@Component