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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring里的容器和Bean对象

發布時間:2023/12/19 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring里的容器和Bean对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

"控制反轉"是指new實例工作不由程序員來做而是交給Spring容器來做。在Spring中BeanFactory是IOC容器的實際代表者。

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

通過閱讀配置元數據提供的指令,容器知道對哪些對象進行實例化,配置和組裝。配置元數據可以通過 XML,Java 注釋或 Java 代碼來表示。

Spring IoC 容器利用 Java 的 POJO(plain old Java object) 類和配置元數據來生成完全配置和可執行的系統或應用程序。

Spring的兩種容器實現:

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

在我測試的Spring 5.0.2中,BeanFactory已經被標注為Deprecated了:

ApplicationContext 包含 BeanFactory 所有的功能,一般情況下,相對于 BeanFactory,ApplicationContext 會更加優秀。當然,BeanFactory 仍可以在輕量級應用中使用,比如移動設備或者基于 applet 的應用程序。

最常被使用的 ApplicationContext 接口實現:

  • ClassPathXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,不需要提供 XML 文件的完整路徑,只需正確配置 CLASSPATH 環境變量即可,因為容器會從 CLASSPATH 中搜索 bean 配置文件。
  • FileSystemXmlApplicationContext:該容器從 XML 文件中加載已被定義的 bean。在這里,需要提供給構造器 XML 文件的完整路徑。

看個FileSystemXmlApplicationContext的例子:

輸出:

Bean對象

被稱作 bean 的對象是構成應用程序的支柱也是由 Spring IoC 容器管理的。bean 是一個被實例化,組裝,并通過 Spring IoC 容器所管理的對象。這些 bean 是由用容器提供的配置元數據創建的。

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

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

Bean的作用域

  • singleton:在spring IoC容器僅存在一個Bean實例,Bean以單例方式存在,默認值
  • prototype: 每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時,相當于執行newXxxBean()
  • request: 每次HTTP請求都會創建一個新的Bean,該作用域僅適用于WebApplicationContext環境
  • session:同一個HTTP Session共享一個Bean,不同Session使用不同的Bean,僅適用于WebApplicationContext環境
  • global-session:一般用于Portlet應用環境,該運用域僅適用于WebApplicationContext環境

singleton

Singleton是默認的作用域,也就是說,當定義 Bean 時,如果沒有指定作用域配置項,則 Bean 的作用域被默認為 singleton.

看個例子:

無論用context API獲取多少次作用域為singleton的Bean對象,Spring IOC容器中只會存在一個Bean對象的實例。

Bean對象的實例什么時候創建的?

從調用棧能看出,是在Spring IOC容器創建時進行Bean實例的創建。

把scope改成prototype再試:

這次,scope為prototype的Bean對象一共實例化了兩次,因為兩次構造函數被調用了:

從調試器的調用棧能發現,prototype作用域的Bean對象,實例化發生延遲至其真正被請求時。

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。