首先,本人正在學習spring,這是一點心得體會,因此本文中會有不足、錯誤之處,歡迎各位大佬進行指點。java
其次對於框架而言,知道反射是很重要,因此建議在學會反射了後在去看看框架。spring
Spring:是企業級java生態應用中的一個開源、輕量級的軟件開發框架(半成品)
做用:主要就是經過軟件開發中的共性進行封裝、抽象、組合等方式來簡化軟件開發過程,下降運營成本和開發週期
總結:就是用於資源整合,方便開發減小開發量。框架就是一個工具,用來方便開發的工具。
那麼,咱們如今介紹的spring底層運行的一些機制,因此在介紹上比較複雜,那麼在整個講解過程反可能會產生spring這麼麻煩的感受,首先在這裏進行一些解釋。框架
Spring中的核心模塊:eclipse
1) IOC 模塊(控制反轉容器):對象建立,對象存儲,對象依賴管理。maven
2) DATA 模塊(整合JDBC,MyBatis,JPA,....)工具
3) MVC 模塊(重點解決與表示層通信問題)單元測試
4) AOP 模塊(重點解決對象功能擴展問題)學習
5).............測試
IOC模塊,spa
介紹:Spring中有一個核心的容器,這個容器一般稱之爲IOC容器,那麼這個容器的核心思想是控制反轉思想的實現。
它能夠負責對象的建立,對象的存儲(map),對象的管理(依賴查找,依賴注入)。
在框架中的地位:
建立過程:在eclipse中建立一個maven項目,添加spring依賴和xml的配置文件,而後編寫一個類,在編寫一個單元測試類,用於建立對象
問題:
1)如何將HelloService對象交給Spring管理?
2)Spring如何構建此類的對象?
3)Spring如何存儲此對象?
其中最爲關鍵的是spring-configs.xml文件中的Bean標籤
Spring中能夠經過bean標籤描述由它管理的對象
1)id屬性的值爲bean對象的惟一標識
2)class屬性的值爲類全名(包名+類名)
好比:<bean id="hello" class="beans.Hello"></bean>
如何測試?
1.初始化Spring框架的IOC對象,解析XML文件,儲存配置信息
好比:ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-configs.xml");
2.獲取Bean對象,內容包含了:什麼時候建立、如何建立、從哪裏獲取對象
好比:Hello hello = ctx.getBean("hello",Hello.class);
3.應用Bean對象
好比:hello.sayHello();
4.釋放資源
好比:ctx.close();
在整個Spring框架中Bean對象是核心,那麼接下來咱們來談談Bean對象的基本配置
Bean對象:在軟件應用中只要是被Spring管理的因此對象都是屬於Bean對象
Bean的構建方式有來兩種:1.直接經過構造方法 2.經過工廠對象的實例方法
1.經過構造方法、靜態方法、實例及實例方法進行構造對象 注意:在構造方法的時候都會用到反射機制
2.工廠對象:(1)經過FactoryBean的getObject方法建立類的實例,定義一個工廠對象,此類型的交給FactoryBean建立實例
(2)定義一個Bean工廠ObjectFactoryBean(要實現FactoryBean接口),此工廠要建立ObjectFactory類型對象,而後將此對象交給Spring管理。
具體的代碼就是不寫了,你們能夠在網上搜索 Spring IOC建立Bean對象的方法 會有不少的方法和例子,你們能夠本身去嘗試作一下
Bean的做用域
1) singleton (這個做用域標識的對象具有全局惟一性):系統默認
2) prototype(這個做用域標識的對象每次獲取都會建立新的對象)
那麼Bean對象其實你們應該知道很重要了,那麼接下來我就像談談關於Bean對象的生命週期
Bean對象是有生命週期的,它的生命週期包括了:建立、初始化、服務、銷燬整個運行的過程,那麼咱們能夠經過Init-method,destory-method屬性指定bean的生命週期方法
好比:
注意:關於Bean對象的銷燬是否由Spring是取決於Bean的的做用域:
1) singleton做用域的對象能夠在容器關閉時銷燬(會調用對象的銷燬資源的方法)
2) prototype做用域的對象能夠由容器建立對象,初始化對象,但不負責銷燬.
這就是在學習了Spring IOC的一點點心得,說得很淺,不是很深,有錯誤的地方還望各位大佬指導下!