【问题标题】:Java EE: Bind some interceptor annotations to a single oneJava EE:将一些拦截器注释绑定到单个注释
【发布时间】:2013-03-03 07:57:46
【问题描述】:

首先:我想使用 Java EE 而不是 Spring! 我有一些自定义注释,它们充当拦截器绑定。我在我的方法上使用这样的注释:

@Logged
@Secured
@RequestParsed
@ResultHandled
public void doSomething() {
   // ...
}

对于某些方法,我想使用其中一个注释,但大多数方法我想像这样使用:

@FunctionMethod
public void doSomething() {
   // ...
}

我可以将这些注释集捆绑到一个注释中吗?我不能在单个拦截器中编写代码,因为对于某些方法我也想单独使用它们。

我知道有一个@Stereotype 定义可能,但据我所知,它用于定义整个类而不是单个方法。

【问题讨论】:

    标签: java jakarta-ee annotations interceptor


    【解决方案1】:

    在一些知名搜索引擎的帮助下,我在 JBoss Weld 的文档中找到了解决方案(第 9.6 章带有继承的拦截器绑定)

    我可以使用从其他拦截器绑定继承的拦截器绑定接口。它看起来像这样:

    @InterceptorBinding
    @Target({ ElementType.METHOD, ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    @Logged
    @Secured
    @RequestParsed
    @ResultHandled
    public @interface FunctionMethod {
      // clean and empty
    }
    

    现在我可以在 bean 方法上使用新的拦截器绑定,所有的拦截器都会被调用:

    @FunctionMethod
    public void doSomething() {
       // ...
    }
    

    【讨论】:

      【解决方案2】:

      我会说,你是在正确的传球与刻板印象。

      没错,找到的示例以及官方 Java EE 6 教程仅在类上使用它作为示例(例如 @Model),但您也可以在自定义注释中声明 @TYPE(MEHOD) 并然后我认为它有效。

      【讨论】:

      • 非常感谢您的回复!当然,我已经尝试过 Stereotype 方法,并且我意识到至少对于拦截器来说,它只能用于类型注释。真正的原因是我要绑定在一起的注解都是@InterceptorBindings。对于这些,需要 METHOD 和 TYPE 的目标类型。但如果我在@Stereotype 中使用其中的几个,那么这个也必须是@Target(TYPE)
      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2013-04-09
      • 2021-04-12
      • 1970-01-01
      相关资源
      最近更新 更多