[英]Creating and using annotation in java
我正在審查開源 spring 項目。 我對這里使用注釋感到困惑。 我想要求澄清這一點。
@Target(ElementType.METHOD)
@Retention(RUNTIME)
@Bean
public @interface Merge {
@AliasFor("targetRef")
String value() default "";
@AliasFor("value")
String targetRef() default "";
Placement placement() default Placement.APPEND;
int position() default 0;
Class<MergeBeanStatusProvider> statusProvider() default MergeBeanStatusProvider.class;
boolean early() default false;
}
此處創建了一個名為 Merge 的注釋。 它有不同的參數和默認值。
@Configuration
public class LocalConfiguration {
@Merge(targetRef = "mergedList", early = true)
public List<String> blLocalMerge() {
return Arrays.asList("local-config1", "local-config2");
}
}
這是在我隨機選擇的任何 class 中使用@Merge
注釋。
當我檢查代碼時,我找不到任何與 Merge 注釋的實現相關的 class 。 順便說一句,我遇到的這個問題不僅僅是這個注釋。 我檢查過的幾乎所有注釋都被使用而沒有以任何方式實現。 如果我們從這個注釋開始,我想我會理解其他人。 這個注解有什么作用? 它給使用它的地方帶來了什么樣的信息。 應用程序如何理解該注釋在運行時的作用而不在任何地方實現。
謝謝。
注釋沒有實現。 它們由外部類或工具根據RetentionPolicy進行處理。 在這種情況下,合並注釋具有運行時保留,因此一旦加載 class,它將通過反射可用。 在運行時,任何相關方(在這種情況下,我假設 Spring 框架)都可以在 LocalConfiguration class 上使用getAnnotations來檢測 Merge 注釋並采取任何需要采取的措施。 可能性實際上取決於定義注釋的框架。 許多 Spring 注入與注釋類似,但它們也被許多其他框架使用,如 Hibernate、Jersey 等。主要思想是外部實體在以后的特定代碼點上用作標記觀點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.