如何为非Action方法编写自定义注释?

时间:2018-11-30 20:51:02

标签: java playframework annotations

因此,我遵循了玩法教程here,以便为我的DAO方法编写一个时间记录批注,其返回类型不是Result(action)类型。在运行完我的代码而没有任何错误之后,注解似乎已被忽略。这是代码:

//LogTime.java
@With(LogTimeAction.class)
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogTime {
    String logStatement() default "Delay detected";
}

//LogTimeAction.java
public class LogTimeAction extends Action<LogTime> {
public CompletionStage<Result> call(Http.Context ctx) {
    Long startTime = System.currentTimeMillis();
    CompletionStage<Result> returnValue = delegate.call(ctx);
    returnValue.thenRun(() -> {
        Long totalTime = System.currentTimeMillis() - startTime;
        Logger.info( configuration.logStatement() + (System.currentTimeMillis() - startTime) + " ms");
        if (totalTime > 3000) {
                Logger.warn(LOG_ABNORMAL_RETRIEVAL_DELAY_DETECTED.getValue().replace("%totalTime%",totalTime.toString()) + configuration.logStatement());
            }
        });
        return returnValue;
    }
}

//and this is how I intend to use it in my Service.java
@LogTime(logStatement = "delayed")
public List<Double> getDataFromDB(String column, String value) {
    return DAO.getDataFromDB(column, value);//basically running a db query inside this method
}

我知道我的日志记录的实现是正确的,因为当我在确实返回Result的控制器方法上使用它时,正在记录执行时间,但是我在控制器中还有其他几件事,我的意图是单独记录数据库访问时间。

0 个答案:

没有答案