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

一、類加載器

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

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

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

2.類加載器的種類

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

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

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

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

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

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

ClassLoader 字節碼對象.getClassLoader();

package cn.qlq;
public class Demo {
public static void main(String[] args) {

//獲得Demo字節碼文件的類加載器
Class clazz = Demo.class;//獲得Demo的字節碼對象
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

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

關於配置文件與註解開發的優缺點:

註解優點:開發效率高 成本低

註解缺點:耦合性大 並且不利於後期維護

1.jdk5提供的註解

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

@Deprecated:標註過時

@SuppressWarnings:壓制警告

發現的問題:

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

2.自定義註解:

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

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 // 獲取字節碼對象
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 // 取到值就可以根據業務處理數據
18
19 //激活方法,也就是讓方法執行
20 method.invoke(new UseMyAnnotion(), "HH");
21 }
22 }

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


分享到:


相關文章: