日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring里的容器和Bean对象

發(fā)布時(shí)間:2023/12/19 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring里的容器和Bean对象 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

"控制反轉(zhuǎn)"是指new實(shí)例工作不由程序員來(lái)做而是交給Spring容器來(lái)做。在Spring中BeanFactory是IOC容器的實(shí)際代表者。

Spring 容器是 Spring 框架的核心。容器將創(chuàng)建對(duì)象,把它們連接在一起,配置它們,并管理他們的整個(gè)生命周期從創(chuàng)建到銷毀。Spring 容器使用依賴注入(DI)來(lái)管理組成一個(gè)應(yīng)用程序的組件。這些對(duì)象被稱為 Spring Beans.

通過(guò)閱讀配置元數(shù)據(jù)提供的指令,容器知道對(duì)哪些對(duì)象進(jìn)行實(shí)例化,配置和組裝。配置元數(shù)據(jù)可以通過(guò) XML,Java 注釋或 Java 代碼來(lái)表示。

Spring IoC 容器利用 Java 的 POJO(plain old Java object) 類和配置元數(shù)據(jù)來(lái)生成完全配置和可執(zhí)行的系統(tǒng)或應(yīng)用程序。

Spring的兩種容器實(shí)現(xiàn):

(1) Spring BeanFactory 容器:最簡(jiǎn)單的容器,給 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口來(lái)定義。BeanFactory 或者相關(guān)的接口,如 BeanFactoryAware,InitializingBean,DisposableBean等
(2) Spring ApplicationContext 容器:該容器添加了更多的企業(yè)特定的功能,例如從一個(gè)屬性文件中解析文本信息的能力,發(fā)布應(yīng)用程序事件給感興趣的事件監(jiān)聽(tīng)器的能力。該容器是由 org.springframework.context.ApplicationContext 接口定義。

在我測(cè)試的Spring 5.0.2中,BeanFactory已經(jīng)被標(biāo)注為Deprecated了:

ApplicationContext 包含 BeanFactory 所有的功能,一般情況下,相對(duì)于 BeanFactory,ApplicationContext 會(huì)更加優(yōu)秀。當(dāng)然,BeanFactory 仍可以在輕量級(jí)應(yīng)用中使用,比如移動(dòng)設(shè)備或者基于 applet 的應(yīng)用程序。

最常被使用的 ApplicationContext 接口實(shí)現(xiàn):

  • ClassPathXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,不需要提供 XML 文件的完整路徑,只需正確配置 CLASSPATH 環(huán)境變量即可,因?yàn)槿萜鲿?huì)從 CLASSPATH 中搜索 bean 配置文件。
  • FileSystemXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,需要提供給構(gòu)造器 XML 文件的完整路徑。

看個(gè)FileSystemXmlApplicationContext的例子:

輸出:

Bean對(duì)象

被稱作 bean 的對(duì)象是構(gòu)成應(yīng)用程序的支柱也是由 Spring IoC 容器管理的。bean 是一個(gè)被實(shí)例化,組裝,并通過(guò) Spring IoC 容器所管理的對(duì)象。這些 bean 是由用容器提供的配置元數(shù)據(jù)創(chuàng)建的。

Spring IoC 容器完全由實(shí)際編寫(xiě)的配置元數(shù)據(jù)的格式解耦。有三種方法把配置元數(shù)據(jù)提供給 Spring 容器:

(1) 基于 XML 的配置文件
(2) 基于注解的配置
(3) 基于 Java 的配置

Bean的作用域

  • singleton:在spring IoC容器僅存在一個(gè)Bean實(shí)例,Bean以單例方式存在,默認(rèn)值
  • prototype: 每次從容器中調(diào)用Bean時(shí),都返回一個(gè)新的實(shí)例,即每次調(diào)用getBean()時(shí),相當(dāng)于執(zhí)行newXxxBean()
  • request: 每次HTTP請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Bean,該作用域僅適用于WebApplicationContext環(huán)境
  • session:同一個(gè)HTTP Session共享一個(gè)Bean,不同Session使用不同的Bean,僅適用于WebApplicationContext環(huán)境
  • global-session:一般用于Portlet應(yīng)用環(huán)境,該運(yùn)用域僅適用于WebApplicationContext環(huán)境

singleton

Singleton是默認(rèn)的作用域,也就是說(shuō),當(dāng)定義 Bean 時(shí),如果沒(méi)有指定作用域配置項(xiàng),則 Bean 的作用域被默認(rèn)為 singleton.

看個(gè)例子:

無(wú)論用context API獲取多少次作用域?yàn)閟ingleton的Bean對(duì)象,Spring IOC容器中只會(huì)存在一個(gè)Bean對(duì)象的實(shí)例。

Bean對(duì)象的實(shí)例什么時(shí)候創(chuàng)建的?

從調(diào)用棧能看出,是在Spring IOC容器創(chuàng)建時(shí)進(jìn)行Bean實(shí)例的創(chuàng)建。

把scope改成prototype再試:

這次,scope為prototype的Bean對(duì)象一共實(shí)例化了兩次,因?yàn)閮纱螛?gòu)造函數(shù)被調(diào)用了:

從調(diào)試器的調(diào)用棧能發(fā)現(xiàn),prototype作用域的Bean對(duì)象,實(shí)例化發(fā)生延遲至其真正被請(qǐng)求時(shí)。

要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":

總結(jié)

以上是生活随笔為你收集整理的Spring里的容器和Bean对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。