javascript
Spring_day01
框架的概念:
框架就是把一些通用的類,和方法集中起來。避免不必要的重復(fù)開發(fā),解放了程序員,提高了開發(fā)效率
Spring??SpringMVC ??Mybatis
:Spring
是一個開源框架。并且是一個輕量級的框架,能夠一站式的分層部署項目。能夠整合現(xiàn)在主流框架起到一個粘合劑的作用
:輕量級
1.空間占用角度:
spring的核心包不到1MB,占用計算機(jī)的資源特別小
2.對容器的依賴角度:
對容器依賴性越低?越輕量
:Spring的IOC
IOC就是控制反轉(zhuǎn)
將對象創(chuàng)建的權(quán)利交給Spring容器來管理。由容器來管理對象的生命周期。
Person?p = new Person(); ???//手動的創(chuàng)建過程
Person p1 = Spring容器.getXXX();
SpringIOC的實現(xiàn)步驟:
1.導(dǎo)入相關(guān)的JAR包
2.編寫實體類
3.編寫配置文件(1.編寫配置文件的頭????2.編寫對象的具體映射關(guān)系)
4.啟動spring容器
5.通過容器獲取對象
6.調(diào)用對象的方法完成相應(yīng)的功能
Spring具體實現(xiàn)過程:
2.編寫實體類
3.編寫配置文件
1.spring默認(rèn)的文件的名稱是applicationContext.xml
2.spring的配置文件的名稱可以是任意的
3.beans 只要是spring管理的類就是一個bean
4.bean的編寫?
id是唯一的標(biāo)識?不能夠重復(fù)
class寫的就是類的全名(包名+類名)
id的編寫原則?見名知意?首字母小寫。其他駝峰規(guī)則
class屬性最好使用自動提示保證不出錯(如果沒有就關(guān)閉再打開)
5.創(chuàng)建Spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
6.獲取對象
Context.getBean("ID");
7.對象調(diào)用方法
:@Test補(bǔ)充
叫做單元測試
要求:
1.返回值必須是public void?XXX(){ ????}
2.@Test標(biāo)簽必須加載方法上
:SpringIOC的原理
控制反轉(zhuǎn)的過程:
Spring容器在啟動的時候。先去讀取applicationContext.xml配置文件。讀取順序是按行讀取。每當(dāng)讀取到一個bean的時候就會按照bean中的class屬性依據(jù)反射的方法創(chuàng)建出來對象,把創(chuàng)建出來的對象當(dāng)做value值存儲到MAP中,bean的ID當(dāng)做Map中的key形成鍵值對的形式,保存到Spring容器中,方便以后調(diào)用
:對象獲取的方法
1.通過bean中的id能夠獲取對象
context.getBean("hello");?
2.通過class屬性來獲取
Hello hello = context.getBean(Hello.class);
注意:
1.對象獲取的時候盡量使用ID,不要用class,可能會由于類型不唯一報錯。
2.如果bean中的ID重復(fù),那么Spring在創(chuàng)建對象時保存到map中的時候就會報錯。會報ID已經(jīng)存在的錯誤。
原因:已經(jīng)存在的bean不能被修改
:對象創(chuàng)建的方式
1.通過默認(rèn)的構(gòu)造方法創(chuàng)建對象
注意的前提:
通過bean中的class利用反射生成對象的時候必須要有無參構(gòu)造。所以以后再寫構(gòu)造方法的時候切記一定要加無參構(gòu)造,否則生成對象時會出錯。
2.靜態(tài)工廠創(chuàng)建對象
class 靜態(tài)工廠類
factory-method 生產(chǎn)對象的方法
<bean id="calendar1" class="factory.StaticFactory" factory-method="getDate"></bean>
Spring的執(zhí)行過程:
首先會根據(jù)class找到靜態(tài)工廠類,然后通過factory-method
找到類中的靜態(tài)方法,執(zhí)行相關(guān)的操作,如果該方法不是靜態(tài)方法則會報錯。所以使用靜態(tài)工廠 必須要調(diào)用靜態(tài)方法
3.實例工廠創(chuàng)建對象
<bean id="newFactory" class="factory.NewFactory"></bean>
<bean id="calendar2" factory-bean="newFactory" factory-method="getDate"></bean>
實例工廠創(chuàng)建對象時,首先根據(jù)factory-bean找到相應(yīng)的工廠bean,然后根據(jù)工廠的class創(chuàng)建工廠對象。根據(jù)factory-method
調(diào)用工廠對象的方法創(chuàng)建需要的對象。
4.Spring工廠創(chuàng)建對象
<bean id="calendar3" class="factory.SpringFactory"></bean>
class屬性寫的是Spring工廠的類型。當(dāng)Spring容器在創(chuàng)建對象的時候會自動的調(diào)用實現(xiàn)方法中的getObject方法,幫助創(chuàng)建對象。
SpringFactory需要實現(xiàn)一個接口
SpringFactory implements FactoryBean<Calendar>
其他的都交給Spring來處理
:Spring bean中的屬性
1.別名標(biāo)簽
<alias name="TareneHello" alias="你好1607"/>
2.對象的單例和多例
單例對象:spring容器內(nèi)部只有一份
1.Spring容器內(nèi)部默認(rèn)維護(hù)了一個單例對象。
2.scope="prototype"
當(dāng)scope屬性為prototype時根據(jù)bean生成的對象就是多例對象。
3.scope="singleton"?
當(dāng)scope屬性為singleton和默認(rèn)不寫的時候?qū)ο髣?chuàng)建都是單例的。
使用場景:
購物車需要是多例的,否則會造成混論。
3.懶加載問題
說明:理想狀態(tài)下,我們需要什么對象容器幫我們生產(chǎn)什么對象,這是最合理的,這樣做既能滿足需求又能減少計算機(jī)壓力
1.什么是懶加載:
懶加載就是在容器啟動的時候不會創(chuàng)建對象,當(dāng)通過容器getBean()的時候才會創(chuàng)建對象。這樣做能實現(xiàn)最理想的狀態(tài)。
2.lazy-init="true" 實現(xiàn)懶加載
???lazy-init="false" 立即加載
???如果默認(rèn)不寫?也是立即加載
3.全局的懶加載配置
default-lazy-init="true" 就能實現(xiàn)懶加載
default-lazy-init="false/default" 立即加載
當(dāng)bean中的懶加載為default 應(yīng)該與全局的懶加載配置保持一致。
4.自定義的初始化和銷毀方法
init-method="init" destroy-method="destroy"
自定義的初始化和銷毀可以手動配置。并且執(zhí)行。
5.DI(依賴注入)
可以通過Spring容器可以動態(tài)的注入屬性
1.依賴注入可以為簡單類型賦值,也可以為引用類型賦值。
但是前提條件是屬性必須添加setXXX方法。如果沒有set方法則不能實現(xiàn)注入。
2.Spring可以為簡單類型和復(fù)雜類型進(jìn)行賦值。包括
List?Set Map(內(nèi)部維護(hù)的是一個LinkedHashMap)
轉(zhuǎn)載于:https://www.cnblogs.com/buyucgb/p/6021541.html
總結(jié)
以上是生活随笔為你收集整理的Spring_day01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node.js搭建简单服务器,用于前端测
- 下一篇: POJ 3348 Cows 凸包面积