【发布时间】:2015-05-30 03:51:02
【问题描述】:
我有一个名为“@ProgressCheck”的注释,我们可以将它放在控制器上以检查应用程序的进度。如果应用程序已经提交或延迟提交,那么它会将用户带到适合该情况的页面。
注解界面为:
@Retention(RetentionPolicy.RUNTIME)
public @interface ProgressCheck {
}
该注释的“实现”类似于:
@Around("execution(* *(..)) && args(session,..) && @annotation(com.foo.aspects.progress.ProgressCheck)")
public Object progressCheck(ProceedingJoinPoint pjp, HttpSession session) throws Throwable {
Applicant applicant = this.applicationSessionUtils.getApplicant(session);
Application application = this.applicationSessionUtils.getApplication(session);
switch (this.applicantService.getProgress(applicant)) {
case SUBMITTED:
return this.modelAndViewFactory.gotoStatusPage(applicant, application);
case LATE:
return this.modelAndViewFactory.gotoDeadlineMissed(applicant, application);
default:
case IN_PROGRESS:
return pjp.proceed();
}
}
根据会话和数据库中的值,注释的“实现”允许用户继续进入控制器,或根据需要将它们重定向到另一个 ModelAndView。
我想为注释提供参数,然后在这个“实现”逻辑中,使用这些参数来进一步调整决策。从这个逻辑来看,在不知道注释应用在哪里的情况下,我如何访问这些参数?还是我应该使用另一种方法?
【问题讨论】:
-
使用注解中定义的访问器方法?
-
我认为另一个问题与我所问的不同。如果我没记错的话,该问题涉及已注释的方法,并获取在该特定实例中分配给注释的值。我想写一个接受参数的注解,并根据这些参数实现注解来做一些事情。
-
你是什么意思实现注释做某事?注释不做任何事情。它只是元数据。有注释处理器基于该元数据执行逻辑。副本解释了如何获取该元数据。也就是说,它解释了如何从从某个带注释的成员(例如方法)检索到的
Day类型的实例调用dayNames。如果这不是您的问题,请澄清。 -
@biziclop:对不起,但这对我来说是新的。不知道你说的是什么方法。你能指出一些解释它的东西或提供一个例子吗?
-
可能想看看
Proxy类。注释只是@Secured行为实现的一小部分。
标签: java reflection annotations aop