框架的概念:程序員
框架就是把一些通用的類,和方法集中起來。避免沒必要要的重複開發,解放了程序員,提升了開發效率spring
Spring SpringMVC Mybatisapp
:Spring框架
是一個開源框架。而且是一個輕量級的框架,可以一站式的分層部署項目。可以整合如今主流框架起到一個粘合劑的做用單元測試
:輕量級測試
1.空間佔用角度:spa
spring的核心包不到1MB,佔用計算機的資源特別小prototype
2.對容器的依賴角度:xml
對容器依賴性越低 越輕量對象
:Spring的IOC
IOC就是控制反轉
將對象建立的權利交給Spring容器來管理。由容器來管理對象的生命週期。
Person p = new Person(); //手動的建立過程
Person p1 = Spring容器.getXXX();
SpringIOC的實現步驟:
1.導入相關的JAR包
2.編寫實體類
3.編寫配置文件(1.編寫配置文件的頭 2.編寫對象的具體映射關係)
4.啓動spring容器
5.經過容器獲取對象
6.調用對象的方法完成相應的功能
Spring具體實現過程:
2.編寫實體類
3.編寫配置文件
1.spring默認的文件的名稱是applicationContext.xml
2.spring的配置文件的名稱能夠是任意的
3.beans 只要是spring管理的類就是一個bean
4.bean的編寫
id是惟一的標識 不可以重複
class寫的就是類的全名(包名+類名)
id的編寫原則 見名知意 首字母小寫。其餘駝峯規則
class屬性最好使用自動提示保證不出錯(若是沒有就關閉再打開)
5.建立Spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
6.獲取對象
Context.getBean("ID");
7.對象調用方法
:@Test補充
叫作單元測試
要求:
1.返回值必須是public void XXX(){ }
2.@Test標籤必須加載方法上
:SpringIOC的原理
控制反轉的過程:
Spring容器在啓動的時候。先去讀取applicationContext.xml配置文件。讀取順序是按行讀取。每當讀取到一個bean的時候就會按照bean中的class屬性依據反射的方法建立出來對象,把建立出來的對象當作value值存儲到MAP中,bean的ID當作Map中的key造成鍵值對的形式,保存到Spring容器中,方便之後調用
:對象獲取的方法
1.經過bean中的id可以獲取對象
context.getBean("hello");
2.經過class屬性來獲取
Hello hello = context.getBean(Hello.class);
注意:
1.對象獲取的時候儘可能使用ID,不要用class,可能會因爲類型不惟一報錯。
2.若是bean中的ID重複,那麼Spring在建立對象時保存到map中的時候就會報錯。會報ID已經存在的錯誤。
緣由:已經存在的bean不能被修改
:對象建立的方式
1.經過默認的構造方法建立對象
注意的前提:
經過bean中的class利用反射生成對象的時候必須要有無參構造。所以之後再寫構造方法的時候切記必定要加無參構造,不然生成對象時會出錯。
2.靜態工廠建立對象
class 靜態工廠類
factory-method 生產對象的方法
<bean id="calendar1" class="factory.StaticFactory" factory-method="getDate"></bean>
Spring的執行過程:
首先會根據class找到靜態工廠類,而後經過factory-method
找到類中的靜態方法,執行相關的操做,若是該方法不是靜態方法則會報錯。因此使用靜態工廠 必需要調用靜態方法
3.實例工廠建立對象
<bean id="newFactory" class="factory.NewFactory"></bean>
<bean id="calendar2" factory-bean="newFactory" factory-method="getDate"></bean>
實例工廠建立對象時,首先根據factory-bean找到相應的工廠bean,而後根據工廠的class建立工廠對象。根據factory-method
調用工廠對象的方法建立須要的對象。
4.Spring工廠建立對象
<bean id="calendar3" class="factory.SpringFactory"></bean>
class屬性寫的是Spring工廠的類型。當Spring容器在建立對象的時候會自動的調用實現方法中的getObject方法,幫助建立對象。
SpringFactory須要實現一個接口
SpringFactory implements FactoryBean<Calendar>
其餘的都交給Spring來處理
:Spring bean中的屬性
1.別名標籤
<alias name="TareneHello" alias="你好1607"/>
2.對象的單例和多例
單例對象:spring容器內部只有一份
1.Spring容器內部默認維護了一個單例對象。
2.scope="prototype"
當scope屬性爲prototype時根據bean生成的對象就是多例對象。
3.scope="singleton"
當scope屬性爲singleton和默認不寫的時候對象建立都是單例的。
使用場景:
購物車須要是多例的,不然會形成混論。
3.懶加載問題
說明:理想狀態下,咱們須要什麼對象容器幫咱們生產什麼對象,這是最合理的,這樣作既能知足需求又能減小計算機壓力
1.什麼是懶加載:
懶加載就是在容器啓動的時候不會建立對象,當經過容器getBean()的時候纔會建立對象。這樣作能實現最理想的狀態。
2.lazy-init="true" 實現懶加載
lazy-init="false" 當即加載
若是默認不寫 也是當即加載
3.全局的懶加載配置
default-lazy-init="true" 就能實現懶加載
default-lazy-init="false/default" 當即加載
當bean中的懶加載爲default 應該與全局的懶加載配置保持一致。
4.自定義的初始化和銷燬方法
init-method="init" destroy-method="destroy"
自定義的初始化和銷燬能夠手動配置。而且執行。
5.DI(依賴注入)
能夠經過Spring容器能夠動態的注入屬性
1.依賴注入能夠爲簡單類型賦值,也能夠爲引用類型賦值。
可是前提條件是屬性必須添加setXXX方法。若是沒有set方法則不能實現注入。
2.Spring能夠爲簡單類型和複雜類型進行賦值。包括
List Set Map(內部維護的是一個LinkedHashMap)