首先,本人正在學習spring,這是一點心得體會,所以本文中會有不足、錯誤之處,歡迎各位大佬進行指點。
其次對於框架而言,知道反射是很重要,所以建議在學會反射了后在去看看框架。
Spring:是企業級java生態應用中的一個開源、輕量級的軟件開發框架(半成品)
作用:主要就是通過軟件開發中的共性進行封裝、抽象、組合等方式來簡化軟件開發過程,降低運營成本和開發周期
總結:就是用於資源整合,方便開發減少開發量。框架就是一個工具,用來方便開發的工具。
那么,我們現在介紹的spring底層運行的一些機制,所以在介紹上比較復雜,那么在整個講解過程反可能會產生spring這么麻煩的感覺,首先在這里進行一些解釋。
Spring中的核心模塊:
1) IOC 模塊(控制反轉容器):對象創建,對象存儲,對象依賴管理。
2) DATA 模塊(整合JDBC,MyBatis,JPA,....)
3) MVC 模塊(重點解決與表示層通訊問題)
4) AOP 模塊(重點解決對象功能擴展問題)
5).............
IOC模塊,
介紹: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的一點點心得,說得很淺,不是很深,有錯誤的地方還望各位大佬指導下!