簡體   English   中英

Java注釋可以擴展/解析為許多注釋?

[英]Java annotation that expands/resolves to many annotations?

我有一組我經常使用的Java注釋,如下所示:

@SomeAnnotation(Something)
@SomeOtherAnnotation
@SomeLastAnnotation(SomethingElse)
class Foo
{
    /* ... */
}

因為我經常將所有這些注釋一起使用,並且可能不得不在偶爾使用它們的任何地方添加它們,所以我想創建一個可以代替使用的新注釋。 然后,該注釋應“解析”為我在某處定義的所有注釋。

@MySuperAnnotation
class Foo
{
    /* ... */
}

我如何聲明@MySuperAnnotation使其對所有其他注釋“解析”?

一般來說,沒有辦法。 但是,如果您使用spring(> = 3.0),則可以使用自定義注釋。 這里簡單的例子。

您可以使用帶有聲明注釋指令的AspectJ進行此操作: http : //www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-declare.html

在您的上下文中,這應該起作用:

public aspect Declaration {
    declare @type: @MySuperAnnotation *: @SomeAnnotation(Something);
    declare @type: @MySuperAnnotation *: @SomeOtherAnnotation;
    declare @type: @MySuperAnnotation *: @SomeLastAnnotation(SomethingElse);
}

您不能做到這一點,除非不重寫所有尋找原始注釋的工具和反射代碼。

(或者,如Oliver所建議的那樣,您可以對已編譯的.class文件進行后處理,以使用不同的內容替換注釋-據我所知,沒有任何工具可以自動為您執行此操作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM