[英]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.