【JAVA菜鳥的紮實功底進行時】(一) ===JAVA反射機制,建立Spring Ioc的基礎

前言:

         IoC 是Spring 容器的內核,AOP,事物式聲明等功能都是建立在此基礎上開花結果。那麼建立IoC的基礎就是基於JAVA的反射機制。


(一)JAVA的另一種引用對象的方法。 

        大家知道,當我要引用一個類時候,通常通過Class構造函數進行實例化。例如:Car car=new Car(); 的方式。其實在JAVA語言中,JAVA 語言允許通過程序化的方式間接對Class進行操作,Class文件由類的裝載器裝載後,在JVM中形成一份描述Class結構的元信息對象,通過元信息對對象可以獲知Class的結構信息,例如:構造函數,屬性,方法。

(二)JAVA 反射機制示例

實體: Car

  1. package com.reflect;  
  2.   
  3. public class Car {  
  4.     private String brand;  
  5.     private String color;  
  6.     private int maxSpeed;  
  7.     public String getBrand() {  
  8.         return brand;  
  9.     }  
  10.     public void setBrand(String brand) {  
  11.         this.brand = brand;  
  12.     }  
  13.     public String getColor() {  
  14.         return color;  
  15.     }  
  16.     public void setColor(String color) {  
  17.         this.color = color;  
  18.     }  
  19.     public int getMaxSpeed() {  
  20.         return maxSpeed;  
  21.     }  
  22.     public void setMaxSpeed(int maxSpeed) {  
  23.         this.maxSpeed = maxSpeed;  
  24.     }  
  25.       
  26.     public Car() {  
  27.     }  
  28.       
  29.     public void introduce() {  
  30.         System.out.println(brand+color+maxSpeed);  
  31.     }  
  32. }  

Car反射機制代碼:

  1. package com.reflect;  
  2.   
  3. import java.lang.reflect.Constructor;  
  4. import java.lang.reflect.Method;  
  5.   
  6. public class TestReflect {  
  7.   
  8.       
  9.     public static void main(String[] args) throws Throwable {  
  10.           
  11.         Car car= initByDefaultConst();  
  12.         car.introduce();  
  13.     }  
  14.       
  15.     public static  Car initByDefaultConst()throws Throwable  {  
  16.           
  17.         //獲取當前線程的上下文 Classloader   
  18.         ClassLoader loader=Thread.currentThread().getContextClassLoader();  
  19.           
  20.         //通過類的裝載器獲取Car類的對象   
  21.         @SuppressWarnings("rawtypes")  
  22.         Class clazz=loader.loadClass("com.reflect.Car");  
  23.           
  24.         //獲取構造方法   
  25.         @SuppressWarnings({ "rawtypes""unchecked" })  
  26.         Constructor cons=clazz.getDeclaredConstructor((Class[])null);  
  27.         Car car=(Car)cons.newInstance();  
  28.           
  29.         @SuppressWarnings("unchecked")  
  30.         Method setBrand=clazz.getMethod("setBrand", String.class);  
  31.         setBrand.invoke(car, "紅旗CA72");  
  32.           
  33.         @SuppressWarnings("unchecked")  
  34.         Method setColor=clazz.getMethod("setColor", String.class);  
  35.         setColor.invoke(car, "黑色");  
  36.           
  37.         @SuppressWarnings("unchecked")  
  38.         Method setMaxSpeed=clazz.getMethod("setMaxSpeed"int.class);  
  39.         setMaxSpeed.invoke(car, 200);  
  40.           
  41.         return car;  
  42.           
  43.     }  
  44. }  

輸出結果:


 Java 類裝載器工作機制:

類裝載器:就是尋找字節碼文件並構建在JVM內部表示對象的組件。

類裝載步驟:

1 裝載:查找和導入Class文件。

2.連接:a 校驗 b準備 c解析

3 初始化: 對靜態變量 ,靜態代碼進行初始化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章