Spring中的一些基礎知識

2021-12-29 20:27:04 字數 3194 閱讀 5013

一、理解ioc控制反轉和di依賴注入

di:依賴注入,就是在spring框架負責建立bean物件時,動態的將依賴物件注入到bean元件。

ioc和di的區別?

ioc:指將物件的建立權,反轉到spring容器。

di:指spring建立物件的過程中,將物件依賴的屬性通過配置進行注入。

二、spring的核心配置檔案

applicationcontext.xml

在程式中讀取spring配置檔案的方式:

在程式中讀取spring配置檔案,通過spring框架獲得bean,完成相應操作

載入classpath (src):

new classpathxmlapplicationcontext("applicationcontext.xml");

載入磁碟路徑:

new filesystemxmlapplicationcontext("applicationcontext.xml");

建立spring 核心工廠物件

通過工廠的getbean 獲得配置例項物件 (ihelloservice) applicationcontext.getbean("helloservice");

三、spring工廠介面

beanfactory介面和applicationcontext介面區別?

*applicationcontext介面間接繼承於beanfactory介面,其實spring的核心工廠是beanfactory。但是在現在的開發中,beanfactory用的已經非常少了。

那麼,beanfactory和applicationcontext最明顯的區別是什麼呢?

1、beanfactory採取延遲載入策略,第一次getbean時才會初始化bean。而applicationcontext是在載入配置檔案時初始化bean。

2、applicationcontext是對beanfactory的擴充套件,提供了更多功能。

國際化處理、事件傳遞、bean自動裝配、各種不同應用層的context實現。

由上可見,applicationcontext是對beanfactory的加強擴充套件。applicationcontext的功能比beanfactory更加多,所以現在開發中基本都在使用applicationcontext,web 專案中使用webapplicationcontext,很少用到beanfactory。

四、ioc容器裝配bean(xml配置方式)

1、spring提供配置bean三種例項化方式

1)使用類構造器例項化(預設無引數)

2)使用靜態工廠方法例項化(簡單工廠模式)

3)使用例項工廠方法例項化(工廠方法模式)

2、bean的其它屬性配置

1)元素的id屬性 和 name屬性的區別

早期spring開發中 bean的 id屬性 ,遵守xml語法 id約束

* id 的命名要滿足xml對id屬性命名規範 必須以字母開始,可以使用字母、數字、連字元、下劃線、句話、冒號

使用name屬性,就可以使用很多特殊字元 , 早期在struts1 和 spring整合

name中含有/ ,使用id會報錯

****** 如果元素沒有id只有name ,name 屬性值可以作為id 使用

2)元素scope屬性

* scope="singleton" 單例 ,在spring ioc容器中僅存在乙個bean例項 (預設的scope)

* scope="prototype" 多例 ,每次從容器中呼叫bean時,都返回乙個新的例項,即每次呼叫getbean()時 ,相當於執行new ***bean()

* scope="request" 用於web開發,將bean放入request範圍 ,request.setattribute("***") , 在同乙個request 獲得同乙個bean

* scope="session" 用於web開發,將bean 放入session範圍,在同乙個session 獲得同乙個bean

* scope="globalsession" 一般用於porlet應用環境 , 分布式系統存在全域性session概念 ,如果不是porlet環境,globalsession 等同於session

在開發中主要使用 scope="singleton"、 scope="prototype"

3、bean的生命週期

在配置 元素,通過 init-method 指定bean的初始化方法,通過 destroy-method 指定bean銷毀方法

* destroy-method 只對 scope="singleton" 有效

* 銷毀方法,必須關閉applicationcontext物件,才會被呼叫

classpathxmlapplicationcontext applicationcontext = new classpathxmlapplicationcontext("applicationcontext.xml");

applicationcontext.close();

bean的完整生命週期 (十一步驟)

1、instantiate bean物件例項化

2、populate properties 封裝屬性

3、如果bean實現beannameaware 執行 setbeanname

4、如果bean實現beanfactoryaware 或者 applicationcontextaware 設定工廠 setbeanfactory 或者上下文物件 setapplicationcontext

5、如果存在類實現 beanpostprocessor(後處理bean) ,執行postprocessbeforeinitialization

6、如果bean實現initializingbean 執行 afterpropertiesset

7、呼叫 指定初始化方法 init

8、如果存在類實現 beanpostprocessor(處理bean) ,執行postprocessafterinitialization

9、執行業務處理

10、如果bean實現 disposablebean 執行 destroy

11、呼叫 指定銷毀方法 customerdestroy

第三步和第四步,使bean 了解spring容器

第五步和第八步,使用beanpostprocessor 就是鉤子函式,作用用來對bean物件進行擴充套件

問題: 在userdao物件所有方法上 新增執行時間監控

解決: 使用 beanpostprocessor 完成

一些基礎知識

關於cd cd 返回剛才的位置 關於ls ls l,簡寫ll ls a顯示的檔案以.開頭,隱藏檔案 la al 關於cp cp r tmp dir 拷目錄 tmp拷到dir 需要加 r的 cp rm 10 13 1.grep 在乙個字元集合中找到符合條件的行輸出 如 grep hello file ...

一些基礎知識

linux基礎知識考查 1 在linux 系統中,以 檔案 方式訪問裝置 2 前台起動的程序使用 ctrl c 終止。3 在使用ls 命令時,用八進位制形式顯示非列印字元應使用引數 b 4 在linux 系統中,用來存放系統所需要的配置檔案和子目錄的目錄是 etc 5 在linux 系統中,壓縮檔案...

Python中的一些基礎知識

python非常追求 的可讀性,一般來說,建議在運算子兩側和逗號後增加乙個空格,在不同功能的 塊之間增加乙個空行。2.在python中的一切皆物件,除常用的內建物件 如下表1所示 外,還有大量的標準庫物件和擴充套件庫物件,標準庫是python預設安裝的,但需要匯入之後才能使用其中的物件,擴充套件庫物...