溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下

發(fā)布時(shí)間:2020-06-12 06:12:05 來源:網(wǎng)絡(luò) 閱讀:219 作者:颯拉阿依醬 欄目:編程語言

Spring 原理
它是一個(gè)全面的、企業(yè)應(yīng)用開發(fā)一站式的解決方案,貫穿表現(xiàn)層、業(yè)務(wù)層、持久層。但是 Spring仍然可以和其他的框架無縫整合

Spring 特點(diǎn)
輕量級(jí)
控制反轉(zhuǎn)
面向切面
容器
框架集合

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring 核心組件

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring 常用模塊
這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring 主要包
這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring 常用注解
bean 注入與裝配的的方式有很多種,可以通過 xml,get set 方式,構(gòu)造函數(shù)或者注解等。簡(jiǎn)單易用的方式就是使用 Spring 的注解了,Spring 提供了大量的注解方式。

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring 第三方結(jié)合

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring IOC 原理
概念

Spring 通過一個(gè)配置文件描述 Bean 及 Bean 之間的依賴關(guān)系,利用 Java 語言的反射功能實(shí)例化Bean 并建立 Bean 之間的依賴關(guān)系。 Spring 的 IoC 容器在完成這些底層工作的基礎(chǔ)上,還提供了 Bean 實(shí)例緩存、生命周期管理、 Bean 實(shí)例代理、事件發(fā)布、資源裝載等高級(jí)服務(wù)。

Spring 容器高層視圖

Spring 啟動(dòng)時(shí)讀取應(yīng)用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相應(yīng)的 Bean 配置注冊(cè)表,然后根據(jù)這張注冊(cè)表實(shí)例化 Bean,裝配好 Bean 之間的依賴關(guān)系,為上層應(yīng)用提供準(zhǔn)備就緒的運(yùn)行環(huán)境。其中 Bean 緩存池為 HashMap 實(shí)現(xiàn)。
這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
IOC 容器實(shí)現(xiàn)
BeanFactory-框架基礎(chǔ)設(shè)施

BeanFactory 是 Spring 框架的基礎(chǔ)設(shè)施,面向 Spring 本身;ApplicationContext 面向使用Spring 框架的開發(fā)者,幾乎所有的應(yīng)用場(chǎng)合我們都直接使用 ApplicationContext 而非底層的 BeanFactory。

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
1.1..1.1.1 BeanDefinitionRegistry 注冊(cè)表

Spring 配置文件中每一個(gè)節(jié)點(diǎn)元素在 Spring 容器里都通過一個(gè) BeanDefinition 對(duì)象表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工注冊(cè)BeanDefinition 對(duì)象的方法。

1.1..1.1.2 BeanFactory 頂層接口

位于類結(jié)構(gòu)樹的頂端 ,它最主要的方法就是 getBean(String beanName),該方法從容器中返回特定名稱的 Bean,BeanFactory 的功能通過其他的接口得到不斷擴(kuò)展:

1.1..1.1.3 ListableBeanFactory

該接口定義了訪問容器中 Bean 基本信息的若干方法,如查看 Bean 的個(gè)數(shù)、獲取某一類型Bean 的配置名、查看容器中是否包括某一 Bean 等方法;

1.1..1.1.4 HierarchicalBeanFactory 父子級(jí)聯(lián)

父子級(jí)聯(lián) IoC 容器的接口,子容器可以通過接口方法訪問父容器; 通過

HierarchicalBeanFactory 接口, Spring 的 IoC 容器可以建立父子層級(jí)關(guān)聯(lián)的容器體系,子容器可以訪問父容器中的 Bean,但父容器不能訪問子容器的 Bean。Spring 使用父子容器實(shí)現(xiàn)了很多功能,比如在 Spring MVC 中,展現(xiàn)層 Bean 位于一個(gè)子容器中,而業(yè)務(wù)層和持久層的 Bean 位于父容器中。這樣,展現(xiàn)層 Bean 就可以引用業(yè)務(wù)層和持久層的 Bean,而業(yè)務(wù)層和持久層的 Bean 則看不到展現(xiàn)層的 Bean。

1.1..1.1.5 ConfigurableBeanFactory

是一個(gè)重要的接口,增強(qiáng)了 IoC 容器的可定制性,它定義了設(shè)置類裝載器、屬性編輯器、容器初始化后置處理器等方法;

1.1..1.1.6 AutowireCapableBeanFactory 自動(dòng)裝配

定義了將容器中的 Bean 按某種規(guī)則(如按名字匹配、按類型匹配等)進(jìn)行自動(dòng)裝配的方法;

1.1..1.1.7 SingletonBeanRegistry 運(yùn)行期間注冊(cè)單例 Bean

定義了允許在運(yùn)行期間向容器注冊(cè)單實(shí)例 Bean 的方法;對(duì)于單實(shí)例( singleton)的 Bean來說,BeanFactory 會(huì)緩存 Bean 實(shí)例,所以第二次使用 getBean() 獲取 Bean 時(shí)將直接從IoC 容器的緩存中獲取 Bean 實(shí)例。Spring 在DefaultSingletonBeanRegistry 類中提供了一個(gè)用于緩存單實(shí)例 Bean 的緩存器,它是一個(gè)用 HashMap 實(shí)現(xiàn)的緩存器,單實(shí)例的 Bean 以beanName 為鍵保存在這個(gè) HashMap 中。

1.1..1.1.8 依賴日志框框

在初始化 BeanFactory 時(shí),必須為其提供一種日志框架,比如使用 Log4J, 即在類路徑下提供 Log4J 配置文件,這樣啟動(dòng) Spring 容器才不會(huì)報(bào)錯(cuò)。

ApplicationContext 面向開發(fā)應(yīng)用

ApplicationContext 由 BeanFactory 派 生 而 來 , 提 供 了 更 多 面 向 實(shí) 際 應(yīng) 用 的 功 能 。ApplicationContext 繼承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口,在此基礎(chǔ)上,還通過多個(gè)其他的接口擴(kuò)展了 BeanFactory 的功能:

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
1、 ClassPathXmlApplicationContext:默認(rèn)從類路徑加載配置文件

2、 FileSystemXmlApplicationContext:默認(rèn)從文件系統(tǒng)中裝載配置文件

3、 ApplicationEventPublisher:讓容器擁有發(fā)布應(yīng)用上下文事件的功能,包括容器啟動(dòng)事件、關(guān)閉事件等。

4、 MessageSource:為應(yīng)用提供 i18n 國(guó)際化消息訪問的功能;

5、 ResourcePatternResolver : 所 有 ApplicationContext 實(shí)現(xiàn)類都實(shí)現(xiàn)了類似于

PathMatchingResourcePatternResolver 的功能,可以通過帶前綴的 Ant 風(fēng)格的資源文件路徑裝載 Spring 的配置文件。

6、 LifeCycle:該接口是 Spring 2.0 加入的,該接口提供了 start()和 stop()兩個(gè)方法,主要用于控制異步處理過程。在具體使用時(shí),該接口同時(shí)被 ApplicationContext 實(shí)現(xiàn)及具體Bean 實(shí)現(xiàn), ApplicationContext 會(huì)將 start/stop 的信息傳遞給容器中所有實(shí)現(xiàn)了該接口的 Bean,以達(dá)到管理和控制 JMX、任務(wù)調(diào)度等目的。

7、 ConfigurableApplicationContext 擴(kuò)展于 ApplicationContext,它新增加了兩個(gè)主要的方法: refresh()和 close(),讓 ApplicationContext 具有啟動(dòng)、刷新和關(guān)閉應(yīng)用上下文的能力。在應(yīng)用上下文關(guān)閉的情況下調(diào)用 refresh()即可啟動(dòng)應(yīng)用上下文,在已經(jīng)啟動(dòng)的狀態(tài)下,調(diào)用 refresh()則清除緩存并重新裝載配置信息,而調(diào)用 close()則可關(guān)閉應(yīng)用上下文。

8、 WebApplication 體系架構(gòu)
WebApplicationContext 是專門為 Web 應(yīng)用準(zhǔn)備的,它允許從相對(duì)于 Web 根目錄的路徑中裝載配置文件完成初始化工作。從 WebApplicationContext 中可以獲得ServletContext 的引用,整個(gè) Web 應(yīng)用上下文對(duì)象將作為屬性放置到 ServletContext中,以便 Web 應(yīng)用環(huán)境可以訪問 Spring 應(yīng)用上下文。

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
Spring Bean 作用域
Spring 3 中為 Bean 定義了 5 中作用域,分別為 singleton(單例)、prototype(原型)、request、session 和 global session,5 種作用域說明如下:

singleton:?jiǎn)卫J剑ǘ嗑€程下不安全)

1、 singleton:?jiǎn)卫J?,Spring IoC 容器中只會(huì)存在一個(gè)共享的 Bean 實(shí)例,無論有多少個(gè)Bean 引用它,始終指向同一對(duì)象。該模式在多線程下是不安全的。Singleton 作用域是Spring 中的缺省作用域,也可以顯示的將 Bean 定義為 singleton 模式,配置為:

<bean id="userDao" class="com.ioc.UserDaoImpl" scope="singleton"/>

prototype:原型模式每次使用時(shí)創(chuàng)建

2、 prototype:原型模式,每次通過 Spring 容器獲取 prototype 定義的 bean 時(shí),容器都將創(chuàng)建一個(gè)新的 Bean 實(shí)例,每個(gè) Bean 實(shí)例都有自己的屬性和狀態(tài),而 singleton 全局只有一個(gè)對(duì)象。根據(jù)經(jīng)驗(yàn),對(duì)有狀態(tài)的bean使用prototype作用域,而對(duì)無狀態(tài)的bean使用singleton作用域。

Request:一次 request 一個(gè)實(shí)例

3、 request:在一次 Http 請(qǐng)求中,容器會(huì)返回該 Bean 的同一實(shí)例。而對(duì)不同的 Http 請(qǐng)求則會(huì)產(chǎn)生新的 Bean,而且該 bean 僅在當(dāng)前 Http Request 內(nèi)有效,當(dāng)前 Http 請(qǐng)求結(jié)束,該 bean實(shí)例也將會(huì)被銷毀。

<bean id="loginAction" class="com.cnblogs.Login" scope="request"/>

session

4、 session:在一次 Http Session 中,容器會(huì)返回該 Bean 的同一實(shí)例。而對(duì)不同的 Session 請(qǐng)求則會(huì)創(chuàng)建新的實(shí)例,該 bean 實(shí)例僅在當(dāng)前 Session 內(nèi)有效。同 Http 請(qǐng)求相同,每一次session 請(qǐng)求創(chuàng)建新的實(shí)例,而不同的實(shí)例之間不共享屬性,且實(shí)例僅在自己的 session 請(qǐng)求內(nèi)有效,請(qǐng)求結(jié)束,則實(shí)例將被銷毀。

<bean id="userPreference" class="com.ioc.UserPreference" scope="session"/>

global Session

5、 global Session:在一個(gè)全局的 Http Session 中,容器會(huì)返回該 Bean 的同一個(gè)實(shí)例,僅在使用 portlet context 時(shí)有效。

Spring Bean 生命周期
實(shí)例化

1、實(shí)例化一個(gè) Bean,也就是我們常說的 new。

IOC 依賴注入

2、 按照 Spring 上下文對(duì)實(shí)例化的 Bean 進(jìn)行配置,也就是 IOC 注入。

setBeanName 實(shí)現(xiàn)

3、 如果這個(gè) Bean 已經(jīng)實(shí)現(xiàn)了 BeanNameAware 接口,會(huì)調(diào)用它實(shí)現(xiàn)的 setBeanName(String)方法,此處傳遞的就是 Spring 配置文件中 Bean 的 id 值

BeanFactoryAware 實(shí)現(xiàn)

4、 如果這個(gè) Bean 已經(jīng)實(shí)現(xiàn)了 BeanFactoryAware 接口,會(huì)調(diào)用它實(shí)現(xiàn)的 setBeanFactory,setBeanFactory(BeanFactory)傳遞的是 Spring 工廠自身(可以用這個(gè)方式來獲取其它 Bean,只需在 Spring 配置文件中配置一個(gè)普通的 Bean 就可以)。ApplicationContextAware 實(shí)現(xiàn)

5、如果這個(gè) Bean 已經(jīng)實(shí)現(xiàn)了 ApplicationContextAware 接口,會(huì)調(diào)用

setApplicationContext(ApplicationContext)方法,傳入 Spring 上下文(同樣這個(gè)方式也可以實(shí)現(xiàn)步驟 4 的內(nèi)容,但比 4 更好,因?yàn)?ApplicationContext 是 BeanFactory 的子接口,有更多的實(shí)現(xiàn)方法)postProcessBeforeInitialization 接口實(shí)現(xiàn)-初始化預(yù)處理

6、如果這個(gè) Bean 關(guān)聯(lián)了 BeanPostProcessor 接口,將會(huì)調(diào)用
postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor 經(jīng)常被用作是 Bean 內(nèi)容的更改,并且由于這個(gè)是在 Bean 初始化結(jié)束時(shí)調(diào)用那個(gè)的方法,也可以被應(yīng)用于內(nèi)存或緩存技術(shù)。

init-method

7、如果 Bean 在 Spring 配置文件中配置了 init-method 屬性會(huì)自動(dòng)調(diào)用其配置的初始化方法。

postProcessAfterInitialization

8、 如果這個(gè) Bean 關(guān)聯(lián)了 BeanPostProcessor 接口,將會(huì)調(diào)用

postProcessAfterInitialization(Object obj, String s)方法。

注:以上工作完成以后就可以應(yīng)用這個(gè) Bean 了,那這個(gè) Bean 是一個(gè) Singleton 的,所以一般情況下我們調(diào)用同一個(gè) id 的 Bean 會(huì)是在內(nèi)容地址相同的實(shí)例,當(dāng)然在 Spring 配置文件中也可以配置非 Singleton。

Destroy 過期自動(dòng)清理階段

1、 當(dāng) Bean 不再需要時(shí),會(huì)經(jīng)過清理階段,如果 Bean 實(shí)現(xiàn)了 DisposableBean 這個(gè)接口,會(huì)調(diào)用那個(gè)其實(shí)現(xiàn)的 destroy()方法;destroy-method 自配置清理

2、 最后,如果這個(gè) Bean 的 Spring 配置中配置了 destroy-method 屬性,會(huì)自動(dòng)調(diào)用其配置的銷毀方法。

這些必備的spring知識(shí),你知道多少?快進(jìn)來測(cè)試一下
3、bean 標(biāo)簽有兩個(gè)重要的屬性(init-method 和 destroy-method)。用它們你可以自己定制初始化和注銷方法。它們也有相應(yīng)的注解(@PostConstruct 和@PreDestroy)。

<bean id="" class="" init-method="初始化方法" destroy-method="銷毀方法">

未完待續(xù)…………

需要完整pdf文檔的小伙伴
請(qǐng)戳 》》》》》》》 https://shimo.im/docs/TC9Jq63Tp6HvTXdg/

如有疏漏,敬請(qǐng)指正,謝謝!!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI