獨立網(wǎng)站怎么做seo當陽seo外包
2.16 模擬Spring IOC容器功能-1
2.17 模擬Spring IOC容器功能-2
什么是IOC?
- 控制反轉,把對象創(chuàng)建和對象之間的調用過程交給Spring框架進行管理
- 使用IOC的目的:為了耦合度降低
解釋:
模仿 IOC容器的功能,我們利用 Map 集合存放需要的對象,并新建一個 conf.properties 文件存放信息,在獲取 對象?之前解析 ioc.properties 文件中的信息,利用反射技術將 conf.properties 文件中的內容通過 Class.forName 的形式解析為 Class 對象放入集合 map 中,這樣每次獲取對象都會從 map 中進行獲取,不需要再 new
Ioc.properties類:
clazz1=cn.edu.xync.myweb.reflect.Person
clazz2=cn.edu.xync.myweb.reflect.Teacher
IOCContainer類:
package cn.edu.xync.myweb.util;import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;public class IOCContainer {//用來存放配置文件讀取通過反射所創(chuàng)建的對象private Map<String,Object> container=new HashMap<String,Object>();public void init() {//讀取配置文件InputStream is=IOCContainer.class.getClassLoader().getResourceAsStream("ioc.properties");//通過當前類的字節(jié)碼加載器去讀取ioc.properties文件,以InputStream類型保存Properties p=new Properties();try {p.load(is);//加載文件Set<String> propertyNames=p.stringPropertyNames();//返回配置文件中所有屬性的名稱Iterator<String> its=propertyNames.iterator();//迭代器遍歷while(its.hasNext()) {String key=its.next();String value=p.getProperty(key);//通過key值拿到value,拿到value的目的時通過反射創(chuàng)建對象//通過反射創(chuàng)建出對象后,添加到Map中container.put(key,Class.forName(value).newInstance());//通過無參數(shù)的構造方法以反射形式創(chuàng)建對象}}catch (InstantiationException e) {System.err.println("通過配置文件創(chuàng)建對象錯誤,請檢查類完整的包路徑名稱和類名稱是否正確");e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {System.err.println("讀取配置文件錯誤,請檢查文件名稱或者路徑是否正確");e.printStackTrace();}}public void showElements() {Set<String> keys=container.keySet();//得到Map中所有key組成的SetIterator<String> its=keys.iterator();while(its.hasNext()) {String key=its.next();Object value=container.get(key);System.out.println("key:"+key+",value:"+value);}}public static void main(String[] args) {IOCContainer con=new IOCContainer();con.init();//初始化容器con.showElements();}
}
運行結果:
總結:
通過簡單的模擬ioc容器功能,再次理解ioc容器,即“控制反轉”,不是什么技術,而是一種設計思想。在Java開發(fā)中,Ioc意味著將你設計好的對象交給容器控制,而不是傳統(tǒng)的在你的對象內部直接控制,對于spring框架來說,就是由Spring來負責控制對象的生命周期和對象間的關系。
錯誤:
原因:is這個輸入流是空的。加載器沒有讀取到我的配置文件,因為我沒有將ioc.properties放在src根目錄文件中,導致讀取不到。