Spring_day01

框架的概念:程序員

框架就是把一些通用的類,和方法集中起來。避免沒必要要的重複開發,解放了程序員,提升了開發效率spring

Spring  SpringMVC   Mybatisapp

:Spring框架

是一個開源框架。而且是一個輕量級的框架,可以一站式的分層部署項目。可以整合如今主流框架起到一個粘合劑的做用單元測試

:輕量級測試

1.空間佔用角度:spa

spring的核心包不到1MB,佔用計算機的資源特別小prototype

2.對容器的依賴角度:xml

對容器依賴性越低 越輕量對象

SpringIOC

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)

相關文章
相關標籤/搜索