1. 程式人生 > >Spring小記(一)

Spring小記(一)

學習Spring框架已有1個月,實習做得最多的就是把Spring啃了下來,還是很開心。相信每個敲程式碼的孩紙都是折翼的天使,因為善良和堅持,終會有所收穫。

Spring平臺實在大,最主要部分可以分為:IoCAOP、元件。元件又包括流行一時的Spring MVCSpring BootSpring JDBC等等,包羅永珍。


(一) IOC:控制反轉與注入依賴相信很多人都會被這個搞暈掉。其實都是指IOC容器,不過是概念上各有側重。舉個例子,以往在Serivice層中呼叫Dao層,我們用程式碼控制:XXDao dao=new XXDao();Spring中,我們把建立交給了IOC容器解決,只需要:

@Autowired XXDao dao;把程式碼控制的部分交給IOC容器管理 ,這就是控制反轉。那麼注入依賴呢?剛提到,@Autowired就是自動注入依賴標籤。容器在管理過程中,就替代我們完成把XXDao匯入的工作,這就是注入依賴。

1IOC容器框架:

最基本的IOC容器就是BeanFactory。萬物不離其宗,所有的IOC容器都是繼承這個介面去實現。IOC容器的核心兩者是BeanFactoryApplicationContext。後者是在前者的基礎上,繼承了Resource等一系列高大上元件從而豐富了IOC容器。所以說,最基本的是BeanFactory,可是最常用的莫過於ApplicationContext

。當然,還有許許多多的容器,如下圖:

 

2IOC容器中Bean生命週期:

(1) Bean例項建立;

(2) 為Bean例項設定屬性;

(3) 呼叫Bean的初始化方法;

(4) 應用可通過IOC容器使用Bean

(5) 當容器關閉時,呼叫Bean銷燬方法;

3、 IOC容器管理Bean4個工序:尋找Bean定義資源、載入和註冊、注入依賴。前三者在IOC容器初始化中完成,注入依賴就具有不確定性。當預例項化時也在初始化中。準確地定義應該是,注入依賴發生在使用者第一次向IOC容器索要Bean時觸發,getBean方法是其入口函式。

(1) 定義資源。Spring有容乃大,無論你是ClathFile

,還是XML還是外部資源 ,都是允許的。一開始接觸Bean配置檔案時,十分地艱辛~仿造網上的教程寫了無數個,最後還是提示找不到配置檔案,愁煞我也。後面坑走得多了,就有經驗了。注意點如下:①預設檔名。什麼是預設檔名呢?Spring配置檔案預設為applicationContext.xml據瞭解。你可以有很多個配置檔案,但要乖乖地import到一個檔案中提供給程式。當然名字可更改,如圖所示:

<Context-param>
	<context-param>
		<param-name>自定義名稱</param-name>
	</context-param>
</Context-param>

②路徑,預設路徑在ClathPath:下,不要擔心,你是可以配置路徑的。在自定義名稱標籤下再新增一段<param-value>自定義路徑</param-value>.

③匯入包。有時候什麼都沒問題,還是出錯時,說不定就是匯入包不對。比如,Spring框架中包有很多,core/aop啊什麼的。不同的包各有側重,具體見官方文件描述。當所需要的類剛好沒匯入時,問題就會出現。所以,耐心地看出錯清單,提示還是很清楚的 ,匯入相應的包問題就解決了。

(2) 載入資源。給了Bean定義文件,容器會去分析結構,然後呢?然後就是把資訊轉化成容器內部資料結構。這個說起來很抽象,其實不過就是轉出POJO便於後續處理。

(3) 註冊。註冊過程就是將載入中轉化成的內部資料結構對映到HASHMAP中。沒錯,Spring最基本的註冊工具就是MapKeyBean名字,值就是內部資料結構。

(4) 注入依賴。這個說起來就大了呢。Bean依賴關係管理主要分為3種注入模式:自動注入@Autowired,建構函式、BeanDefinition的屬性值。粗略而言,容器檢測是否有索要Bean,檢測到後呼叫getBean將其載入進來。

4、 最基本的IOC容器的使用過程

貼一段我的簡單運用:

 ClassPathResource resource=new ClassPathResource("applicationContext.xml");//定義BeanDefinition資訊
        DefaultListableBeanFactory beanFactory=new DefaultListableBeanFactory();//建立IOC容器
        XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(beanFactory);//建立IOC容器的BeanDefinition閱讀器
        reader.loadBeanDefinitions(resource);//匯入資源,IOC容器回撥建立bean
        CommonEmployee bean=(CommonEmployee)beanFactory.getBean("targetbean");
        bean.setName("wang");
        System.out.print("OK"+bean.getName());

不得吧說IoC容器博大精深,三眼兩語並不能真正闡述清楚。以上只是入門見解,而更多的知識與思想都只能通過看原始碼和官方文件進行補充。