gpt4 book ai didi

java - 为什么覆盖方法仍然可以有父方法的注释?

转载 作者:行者123 更新时间:2023-12-01 13:09:48 25 4
gpt4 key购买 nike

最近开发了一个管理系统,基本上都是CRUD操作,见下图:

GET admin/foos
GET admin/foos/{id}
POST admin/foos
PUT admin/foos
DELETE admin/foos/{id}

为了减少开发工作,我将通用逻辑放在BaseController中,具体的Controller扩展BaseController,例如

public class FooController extends BaseController
public class BarController extends BaseController

可以成功运行,但是有一个问题:为什么可以在BaseController的方法中扩展注解,而不能在BaseController自身中扩展注解?

@RestController
@Slf4j
public abstract class BaseController

@GetMapping("/{id}")
@ApiOperation(value = "detail info", notes = "")
protected ApiResult detail(@PathVariable String id) {
// ...
}

@RestController
@RequestMapping("admin/bars")
public class BarController extends BaseController{
@Override
protected ApiResult detail(String id) {
return super.detail(id);
}
}

为什么BarController不能扩展BaseController的@RestController和@Slf4j,而Override方法可以扩展@GetMapping和@ApiOperation?在我看来Override方法会完全取代原来的方法,所以它不应该扩展父方法的注解。

最佳答案

@RestController@Slf4j 是基于类的注解,而@GetMapping@ApiOperation 是基于方法的注解被@Override 覆盖。

更多详细信息:https://javaee.github.io/javaee-spec/AnnotationRules

关于java - 为什么覆盖方法仍然可以有父方法的注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63010560/

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