小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

各大框架都在使用注解,淺談注解的使用及原理以及類加載器

 quasiceo 2018-08-07

一、類加載器

1.什么是類加載器,作用是什么?

類加載器就加載字節(jié)碼文件(.class)

2.類加載器的種類

類加載器有三種,不同類加載器加載不同的

1)BootStrap:引導類加載器:加載都是最基礎的文件

2)ExtClassLoader:擴展類加載器:加載都是基礎的文件

3)AppClassLoader:應用類加載器:三方jar包和自己編寫java文件

 

怎么獲得類加載器?(重點)

ClassLoader 字節(jié)碼對象.getClassLoader();

復制代碼
package cn.qlq;


public class Demo {

    public static void main(String[] args) {
        
        //獲得Demo字節(jié)碼文件的類加載器
        Class clazz = Demo.class;//獲得Demo的字節(jié)碼對象
        ClassLoader classLoader = clazz.getClassLoader();//獲得類加載器
        //getResource的參數路徑相對classes(src)
        //獲得classes(src)下的任何的資源
        String path = classLoader.getResource("cn/qlq/jdbc.properties").getPath();
        //classLoader.getResourceAsStream("");
        System.out.println(path);
        
    }
    
}
復制代碼

 

 

 

二、注解 @xxx

注解在目前而言最主流的應用:代替配置文件

關于配置文件與注解開發(fā)的優(yōu)缺點:

注解優(yōu)點:開發(fā)效率高 成本低 

注解缺點:耦合性大 并且不利于后期維護

1.jdk5提供的注解

@Override:告知編譯器此方法是覆蓋父類的

@Deprecated:標注過時

@SuppressWarnings:壓制警告

 

發(fā)現的問題:

不同的注解只能在不同的位置使用(方法上、字段上、類上)

 

 

2.自定義注解:

1.注解是給機器看的,注釋是給程序員看的,這是兩者的區(qū)別?,F在各大框架都在使用注解,而我們程序員需要做的就是知道如何使用注解,而對其底層原理卻不清楚,今天看了一段視頻,現在淺談一下注解的使用。

2.注解的使用:

  大體分為三部分: 定義注解、使用注解、解析注解。在框架中定義與解析框架都已經為我們做好了。

(1)定義注解:定義一個簡單的注解:

 

復制代碼
 1 import java.lang.annotation.ElementType;
 2 import java.lang.annotation.Retention;
 3 import java.lang.annotation.RetentionPolicy;
 4 import java.lang.annotation.Target;
 5 
 6 
 7 @Target(ElementType.METHOD)
 8 @Retention(RetentionPolicy.RUNTIME)
 9 public @interface MyAnnotation {
10     //定義注解的屬性,這不是方法
11     String name();//必選注解
12     int value() default 20;//有屬性就是可選屬性
13 }
復制代碼

做一個解釋吧:定義前面的@Target,與@Retention又稱為元注解,限制定義的注解的特性:

@Target定義注解使用的位置,值有:看名字一般就很明顯了吧

                                 

    @Retention:限定注解的可見范圍:值有

                         

    一個圖解釋上面的可見范圍:

            

(2)注解的使用:

復制代碼
 1 package annotation;
 2 
 3 public class UseMyAnnotion {
 4 
 5 //    這里只用一個屬性,另一個value屬性有默認值不用設置
 6     @MyAnnotation(name = "QizoZhi")
 7     public void show(String str){
 8         System.out.println(str);
 9     }
10 }
復制代碼

 

 

 (3)解析注解:這里使用了底層的映射原理

 

 

復制代碼
 1 package annotation;
 2 
 3 import java.lang.reflect.InvocationTargetException;
 4 import java.lang.reflect.Method;
 5 
 6 public class MyAnnotationParser {
 7 
 8     public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
 9 //        獲取字節(jié)碼對象
10         Class clazz = UseMyAnnotion.class;
11         Method method = clazz.getMethod("show", String.class);
12 //        獲取方法上面的注解
13         MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
14 //        獲取注解屬性值
15         System.out.println(annotation.name()+"\t"+annotation.value());
16         
17 //        取到值就可以根據業(yè)務處理數據
18         
19         //激活方法,也就是讓方法執(zhí)行
20         method.invoke(new UseMyAnnotion(), "HH");
21     }
22 }
復制代碼

 

 

 

到這里注解基本上就完了,我們需要了解底層實現原理,真正開發(fā)的時候定義注解以及解析注解一般不用我們寫,我們只需要學會使用框架提供的注解,但是使用注解的開發(fā)也有缺點。對后期的維護增加了困難。

 

 

Java注解之Retention、Documented、Target介紹參考:https://www.cnblogs.com/qlqwjy/p/8516551.html

 

【小主,覺得有用的話點擊右邊的打賞打賞點哦!多多少少沒關系,一分也是對我的支持和鼓勵。謝謝!】

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多