Spring註解與Java元註解小結
阿新 • • 發佈:2018-06-06
spa package param style 值範圍 描述 tro ret 類型
註解 Annotation
基於註解的開發,使得代碼簡潔,可讀性高,簡化的配置的同時也提高了開發的效率,尤其是SpringBoot的興起,隨著起步依賴和自動配置的完善,更是將基於註解的開發推到了新的高度。
元註解 meta-annotation
Java 5 定義了四個標準的元註解類型,用以提供對其它註解的功能說明。
位於java.lang.annotation包下,分別為:
1. @Target
2. @Retention
3. @Documented
4. @Inherited
以@Profile註解為例:
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Conditional(ProfileCondition.class) public @interface Profile { /** * The set of profiles for which the annotated component should be registered. */ String[] value(); }
@Target
說明註解所修飾的對象範圍。
註解可用於:package、type(類、接口、枚舉、註解)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(循環變量、catch參數)。
按照作用範圍,個人給出的常用註解,按照作用範圍排序,各類暫舉一:
@Configuration、@MapperScan、@RestController、@RequestMapping、@ResponseBody、@Autowired、@Resource、@Value、@PathVariable。。。
具體的取值範圍為ElementType(enum)類型的數組,見源碼:
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { /** * Returns an array of the kinds of elements an annotation type * can be applied to. * @return an array of the kinds of elements an annotation type * can be applied to*/ ElementType[] value(); }
- ElementType.Constructor : 描述構造器
- ElementType.Field : 描述域
- ElementType.LocalVariable : 描述局部變量
- ElementType.Method : 描述方法
- ElementType.Package : 描述包
- ElementType.Parameter : 描述參數
- ElementType.Type : 描述類、接口、enum、annotation
@Retention
定義註解的作用時期(源文件、字節碼、運行期)。
用以 說明被描述的註解在什麽範圍內生效。
取值唯一,即具體的保存策略,RetentionPolicy(enum)之一。
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { /** * Returns the retention policy. * @return the retention policy */ RetentionPolicy value(); }
RetentionPolicy包括:
- SOURCE : 源文件有效
- CLASS : 字節碼文件有效
- RUNTIME : 運行時有效
@Documented
標記註解,可被javadoc之類的工具文檔化,即描述該類型的註解,應該作為被標註的程序成員的公共API,沒有成員
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Documented { }
@Inherited
標記註解,描述的註解是可被繼承的。即如果一個類被@Inherited標記的註解所修飾,則該註解同樣作用於這個類的子類。
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Inherited { }
Spring註解與Java元註解小結