您好,登錄后才能下訂單哦!
本文主要介紹Java中與注解和動態代理有關的部分知識,接下來我們看看具體內容。
Annotation(注解)
其實就是代碼里的特殊標記, 它用于替代配置文件,也就是說,傳統方式通過配置文件告訴類如何運行,有了注解技術后,開發人員可以通過注解告訴類如何運行。
1、 三個基本的Annotation:
Override:限定重寫父類方法, 該注解只能用于方法
Deprecated:用于表示某個程序元素(類, 方法等)已過時
SuppressWarnings:抑制編譯器警告.
2、自定義Annotation 使用@interface 關鍵字
配置文件的信息,在注解中采用屬性描述
例:
String name();
帶默認值的方式:String name() default “xxx”
注解屬性的類型只能是如下類型:
String類型,8大基本數據類型,Class類型,枚舉類型,注解類型,以上類型的一維數組
特殊屬性value:如果注解中有一個名稱value的屬性,那么使用注解時可以省略value=部分,如@MyAnnotation(“xxx")
特殊屬性value[];
3、元Annotation指修飾Annotation的Annotation。
JDK中定義了如下元Annotation:
Retention: 只能用于修飾一個Annotation 定義, 用于指定該Annotation 可以保留的域, @Rentention 包含一個RetentionPolicy 類型的成員變量, 通過這個變量指定域。
RetentionPolicy.CLASS:編譯器將把注解記錄在 class 文件中. 當運行 Java 程序時, JVM 不會保留注解. 這是默認值
RetentionPolicy.RUNTIME:編譯器將把注釋記錄在 class 文件中. 當運行 Java 程序時, JVM 會保留注解. 程序可以通過反射獲取該注釋(所以自定義一個注解時,一般都要加這個元注解)
RetentionPolicy.SOURCE:編譯器直接丟棄這種策略的注釋
4、@Target:指定注解用于修飾類的哪個成員。@Target 包含了一個名為value,類型為ElementType的成員變量。
@Documented: 用于指定被該元Annotation 修飾的Annotation 類將被javadoc 工具提取成文檔.
@Inherited: 被它修飾的Annotation 將具有繼承性.如果某個類使用了被@Inherited 修飾的Annotation, 則其子類將自動具有該注解
動態代理
Java提供了一個Proxy類,調用它的newInstance方法可以生成某個對象的代理對象,使用該方法生成代理對象時,需要三個參數:
1.生成代理對象使用哪個類裝載器
2.生成哪個對象的代理對象,通過接口指定
3.生成的代理對象的方法里干什么事,由開發人員編寫handler接口的實現來指定。
初學者必須理解,或不理解必須記住的2件事情:
Proxy類負責創建代理對象時,如果指定了handler(處理器),那么不管用戶調用代理對象的什么方法,該方法都是調用處理器的invoke方法。
由于invoke方法被調用需要三個參數:代理對象、方法、方法的參數,因此不管代理對象哪個方法調用處理器的invoke方法,都必須把自己所在的對象、自己(調用invoke方法的方法)、方法的參數傳遞進來。
在動態代理技術里,由于不管用戶調用代理對象的什么方法,都是調用開發人員編寫的處理器的invoke方法(這相當于invoke方法攔截到了代理對象的方法調用)。
并且,開發人員通過invoke方法的參數,還可以在攔截的同時,知道用戶調用的是什么方法,因此利用這兩個特性,就可以實現一些特殊需求,例如:攔截用戶的訪問請求,以檢查用戶是否有訪問權限、動態為某個對象添加額外的功能。
總結
以上就是本文關于Java注解和動態代理相關知識的全部內容,希望對大家Java程序設計有所幫助。更多Java內容,感興趣的朋友可以閱讀:關于Java反射機制 你需要知道的事情、ibatis學習之搭建Java項目、Java編程思想對象的容納實例詳解等。
感謝大家對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。