註解的作用:
- 能夠讀懂別人寫的代碼,特別是框架相關的的代碼
- 讓變成更加簡潔,代碼更加清晰
- 讓別人高看一眼
不懂註解就不能說學過Spring,mybatis
Java 1.5 開始引入註解。
註解概念:
Java提供了一種源程序中的元素關聯任何信息和任何元數據的途徑和方法。
Java常見的註解
JDK 自帶註解: @Override @Deprecated @Suppvisewrnings
@Override 覆蓋父類的方法
@Deprecated 方法過時
@SuppressWarnings 告訴編譯器對被批註的代碼元素內部的某些警告保持靜默。
常見的第三方註解
Spring : @Autowired @Service @Repository
Mybatis : @InsertProvider @UpdateProvider @Options
@Autowired 可以在使用實例的時候省去在Spring配置文件中大量的配置
註解的分類
按照運行機制:
- 源碼註解 註解只在源碼中存在,編譯成.class文件就不存在了
- 編譯時註解 在源碼中和.class文件中都存在 如JDK自帶的三個註解 @Override, @Deprecated, @Suppvisewarnings
- 運行時註解 在運行階段還起作用,甚至會影響運行邏輯。 @Autowired 把成員變量注入進來
元註解: 給註解的註解
自定義註解
自定義註解語法要求
使用 @interface 關鍵字來定義註解
成員以 無參 無異常方式聲明
可以用default爲成員指定一個默認值
成員類型是受限的,合法的類型包含基本類型以及String,Class,Annotation和Enumeration
如果註解只有一個成員,則成員名必須取名爲 value(),在使用時可以忽略成員名和賦值號(=)
註解類可以沒有成員,沒有成員的註解稱爲標識註解
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
String desc();
String author();
int age() default 18;
}</span></span>
註解的註解(元註解)
上面的代碼中的前四行就是元註解:
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@Target({ElementType.METHOD, ElementType.TYPE}) //註解的作用域,有CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE.
@Retention(RetentionPolicy.RUNTIME) //註解的生命週期:: SOURCE, CLASS, RUNTIME
@Inherited //標識型註解, 允許繼承</span></span>
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@Documented //生成javadoc 時包含註解的信息
</span></span>
使用自定義註解
使用自定義註解的語法:
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@<註解名> (<成員名1>=<成員值1> , <成員名2>=<成員值2> , ...)
@Description (desc="I am eysColor", author="Mooc boy", age=18)
public String eyeColor() {
}</span></span>
解析註解
概念:通過反射獲取類、函數或成員函數上運行時註解信息,從而實現動態控制程序運行的邏輯。