Java反射機制使用場景


 1 import java.io.*;
 2 import java.util.Properties;
 3 
 4 /*問題描述:存在一個主板--已經定義好,不想修改其代碼,還想在主板上面增加一些其他功能?
 5  *問題解決方法:主板在定義的時候對外提供一個接口,讓其他設備實現該接口,並把這些設備的
 6  *信息寫在配置文件里面。主板定義的時候讀配置文件的信息,動態的獲取其他設備的信息,並使用
 7  *其他的功能。這樣就完全不用修改主板的代碼。極大的提高了程序的擴展性。
 8  *所以通過反射就可以動態獲取擴展類的對象,只需要修改具體配置文件的內容即可。
 9  *
10  *反射:動態的獲取類的信息。其實是通過類名,加載類,獲取類的Class對象,進而做其他的操作。
11  *        使用反射的最大的好處是程序的擴展性大大的提高。
12  *反射涉及的類:Class,java.lang.reflect包里面的Method,Field,Constructor支持
13  * */
14 public class UseReflection {
15 
16     public static void main(String[] args) throws IOException, ClassNotFoundException, Exception {
17         MainBoard mb = new MainBoard();
18         mb.run();
19         
20         //把添加的設備寫在配置文件中,並將該文件封裝為對象
21         File f = new File("pci.properties");
22         //將配置文件關聯到流
23         FileInputStream fis = new FileInputStream(f);
24         //創建Properties對象
25         Properties prop = new Properties();
26         //將流中的信息加載到prop里面
27         prop.load(fis);
28         //遍歷從流中得到的信息
29         for(int i = 0; i < prop.size();i++){
30             String name = prop.getProperty("pci"+(i+1));
31             Class clazz = Class.forName(name);
32             PCI p = (PCI)clazz.newInstance();
33             mb.usePCI(p);
34         }
35         
36 
37     }
38 
39 }
40 
41 class MainBoard{
42     public void run(){
43         System.out.println("mainboard run-------");
44     }
45     
46     public void usePCI(PCI p){
47         if(p != null){
48             p.open();
49             p.close();
50         }
51     }
52 }
public interface PCI {
	
	public void open();
	public void close();
}


class SoundBoard implements PCI{
	
	
	public SoundBoard() {
		
	}

	@Override
	public void open() {
		System.out.println("open sound");
		
	}

	@Override
	public void close() {
		System.out.println("close sound");
	}
}

class WifiBoard implements PCI{
	
	public WifiBoard() {
	
	}

	@Override
	public void open() {
		System.out.println("open wifi");
		
	}

	@Override
	public void close() {
		System.out.println("close wifi");
		
	}
}

  上面是一種模擬的反射機制的使用,真實使用反射機制的一個比較常見的例子是Tomcat--web服務器,Tomcat服務器的作用:就是處理瀏覽器的請求

和給予合適的應答,但是瀏覽器的請求類型通常不一樣,為了提高服務器的擴展性,通常在Tomcat編寫時就對外提供一個公共的接口--Servlet,要進行怎樣

的響應和處理請求,需要開發人員需要做的就是直接實現該接口,定義合適的處理方式,並將具體實現類信息寫在配置文件中,Tomcat在操作的時候根據讀取

配置文件的內容,動態的獲得合適的處理方式,處理瀏覽器的請求,開發者的編程難度也下降,直接面對的是接口和配置文件。想要修改具體的處理方式,直接

修改配置文件的內容即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM