自定义Java注释以引入方法参数并执行代码

时间:2019-03-21 18:33:51

标签: java annotations

问题

基本上,我想为方法创建一个自定义注释。使用时,将添加方法参数和一行代码。

问题是:这有可能吗?

示例

我想简化以下方法:

@GetMapping("/thing")
public ResponseEntity getThing(@CookieValue("Session-Token") String sessionToken) {
    User user = authenticator.authenticateSessionTokenOrThrow(sessionToken);
    ... // user is successfully authenticated, get the "thing" from the database
}

@GetMapping("/thing")
@User
public ResponseEntity getThing() {
    ... // user is successfully authenticated, get the "thing" from the database
}

如何实现自定义注释@User,以使上述两种方法的行为完全相同?? 为示例起见,请忽略以上代码是针对Spring Boot框架的事实。

1 个答案:

答案 0 :(得分:1)

假设您有一个带有此类方法的类

class MyHandlerClass implements Whatever {
    @GetMapping("/thing")
    @User
    public ResponseEntity getThing() {
        ... // user is successfully authenticated, get the "thing" from the database
    }

您可以使用注释处理来生成这样的类

class AuthenticatingMyHandlerClass extends MyHandlerClass {

    @GetMapping("/thing")
    public ResponseEntity getThing(@CookieValue("Session-Token") String sessionToken) {
        User user = authenticator.authenticateSessionTokenOrThrow(sessionToken);
        ResponseEntity ret = super.getThing(sessionToken);
        doSomethingWith(ret);
        return ret;
    }

然后,您使用生成的类而不是主类来处理请求,并且还将添加任何代码。