最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?IoC容器Bean作用域的singleton與prototype使用配置

 更新時(shí)間:2023年12月26日 09:21:42   作者:小萬哥  
這篇文章主要為大家介紹了Spring?IoC容器Bean作用域的singleton與prototype使用配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

 引言

在您的應(yīng)用程序中,由 Spring IoC 容器管理的形成其核心的對(duì)象被稱為 "bean"。一個(gè) bean 是由 Spring IoC 容器實(shí)例化、組裝和管理的對(duì)象

這些 bean 是通過您提供給容器的配置元數(shù)據(jù)創(chuàng)建的。Bean 定義包含了所謂的配置元數(shù)據(jù),容器需要了解以下內(nèi)容:

  • 如何創(chuàng)建一個(gè) bean
  • Bean 的生命周期詳細(xì)信息
  • Bean 的依賴關(guān)系

上述所有的配置元數(shù)據(jù)都轉(zhuǎn)化為每個(gè) bean 定義的以下屬性集合。

序號(hào)屬性和描述
1class
這是必填屬性,指定要用于創(chuàng)建 bean 的 bean 類。
2name
此屬性唯一地指定 bean 標(biāo)識(shí)符。在基于 XML 的配置元數(shù)據(jù)中,您可以使用 id 和/或 name 屬性來指定 bean 標(biāo)識(shí)符。
3scope
此屬性指定從特定 bean 定義創(chuàng)建的對(duì)象的范圍
4constructor-arg
這用于注入依賴項(xiàng)
5properties
這用于注入依賴項(xiàng)
6autowiring mode
這用于注入依賴項(xiàng)
7lazy-initialization mode
延遲初始化的 bean 告訴 IoC 容器在首次請求時(shí)創(chuàng)建 bean 實(shí)例,而不是在啟動(dòng)時(shí)創(chuàng)建。
8initialization method
在容器設(shè)置了 bean 的所有必需屬性之后,要調(diào)用的回調(diào)函數(shù)
9destruction method
在包含 bean 的容器銷毀時(shí)要使用的回調(diào)函數(shù)

Spring 配置元數(shù)據(jù)

Spring IoC 容器與實(shí)際編寫配置元數(shù)據(jù)的格式完全解耦。以下是向 Spring 容器提供配置元數(shù)據(jù)的三種重要方法:

  • 基于 XML 的配置文件。
  • 基于注解的配置。
  • 基于 Java 的配置。

您已經(jīng)看到了如何將基于 XML 的配置元數(shù)據(jù)提供給容器,但讓我們看一下包含不同 bean 定義的 XML 配置文件的另一個(gè)示例,包括延遲初始化、初始化方法和銷毀方法。

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
   <!-- 一個(gè)簡單的 `bean` 定義 -->
   <bean id = "..." class = "...">
      <!-- 此處是該 `bean` 的協(xié)作者和配置 -->
   </bean>
   <!-- 啟用延遲初始化的 `bean` 定義 -->
   <bean id = "..." class = "..." lazy-init = "true">
      <!-- 此處是該 `bean` 的協(xié)作者和配置 -->
   </bean>
   <!-- 具有初始化方法的 `bean` 定義 -->
   <bean id = "..." class = "..." init-method = "...">
      <!-- 此處是該 `bean` 的協(xié)作者和配置 -->
   </bean>
   <!-- 具有銷毀方法的 `bean` 定義 -->
   <bean id = "..." class = "..." destroy-method = "...">
      <!-- 此處是該 `bean` 的協(xié)作者和配置 -->
   </bean>
   <!-- 更多的 `bean` 定義在此處 -->

Spring 中的 Bean 作用域

在定義 <bean> 時(shí),您可以選擇為該 bean 聲明一個(gè)作用域。例如,要強(qiáng)制 Spring 每次需要時(shí)生成新的 bean 實(shí)例,您應(yīng)該將 bean 的作用域?qū)傩月暶鳛?nbsp;prototype。類似地,如果您希望 Spring 每次需要時(shí)返回相同的 bean 實(shí)例,您應(yīng)該將 bean 的作用域?qū)傩月暶鳛?nbsp;singleton。

Spring 框架支持以下五種作用域,其中三種僅在使用與 Web 相關(guān)的 ApplicationContext 時(shí)才可用。

序號(hào)作用域 & 描述
1singleton
將 bean 定義的作用域限制為 Spring IoC 容器中的單個(gè)實(shí)例(默認(rèn))。
2prototype
將單個(gè) bean 定義的作用域限制為具有任意數(shù)量的對(duì)象實(shí)例。
3request
將 bean 定義的作用域限制為 HTTP 請求。僅在具有與 Web 相關(guān)的 Spring ApplicationContext 的情況下有效。
4session
將 bean 定義的作用域限制為 HTTP 會(huì)話。僅在具有與 Web 相關(guān)的 Spring ApplicationContext 的情況下有效。
5global-session
將 bean 定義的作用域限制為全局 HTTP 會(huì)話。僅在具有與 Web 相關(guān)的 Spring ApplicationContext 的情況下有效。

當(dāng)討論與

Web 相關(guān)的 Spring ApplicationContext 時(shí),將討論其他三種作用域。

單例作用域(singleton)

如果將作用域設(shè)置為 singleton,Spring IoC 容器將創(chuàng)建一個(gè)對(duì)象的確切實(shí)例,該實(shí)例由 bean 定義定義。此單個(gè)實(shí)例存儲(chǔ)在此類單例 bean 的緩存中,對(duì)于該命名 bean 的所有后續(xù)請求和引用都會(huì)返回緩存的對(duì)象。

默認(rèn)作用域始終是 singleton。但是,當(dāng)您需要一個(gè)且僅一個(gè) bean 實(shí)例時(shí),您可以在 bean 配置文件中將作用域?qū)傩栽O(shè)置為 singleton,如下所示:

<!-- 具有 `singleton` 作用域的 `bean` 定義 -->
<bean id="..." class="..." scope="singleton">
   <!-- 此處放置此 `bean` 的協(xié)作者和配置 -->

示例

假設(shè)您已經(jīng)準(zhǔn)備好 Eclipse IDE,并采取以下步驟創(chuàng)建 Spring 應(yīng)用程序:

步驟

  • 創(chuàng)建一個(gè)名為 SpringExample 的項(xiàng)目,在創(chuàng)建的項(xiàng)目中的 src 文件夾下創(chuàng)建一個(gè)名為 com.tutorialspoint 的包
  • 使用"Add External JARs"選項(xiàng)添加所需的 Spring 庫
  • 在 com.tutorialspoint 包下創(chuàng)建 Java 類 HelloWorld 和 MainApp
  • 在 src 文件夾下創(chuàng)建 Beans 配置文件 Beans.xml
  • 最后一步是創(chuàng)建所有 Java 文件和 Bean 配置文件的內(nèi)容,并按以下說明運(yùn)行應(yīng)用程序。

以下是 HelloWorld.java 文件的內(nèi)容:

package com.tutorialspoint;
public class HelloWorld {
   private String message;
   public void setMessage(String message){
      this.message  = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
}

以下是 MainApp.java 文件的內(nèi)容:

package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
      objA.setMessage("I'm object A");
      objA.getMessage();
      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
      objB.getMessage();
   }
}

以下是 singleton 作用域所需的 Beans.xml 配置文件的內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="singleton">
   </bean>
</beans>

當(dāng)您完成創(chuàng)建源代碼和 bean 配置文件后,讓我們運(yùn)行應(yīng)用程序。如果您的應(yīng)用程序一切正常,它將打印以下消息:

Your Message : I'm object A
Your Message : I'm object A

原型作用域(prototype)

如果將作用域設(shè)置為 prototype,Spring IoC 容器將在每次請求特定 bean 時(shí)創(chuàng)建該對(duì)象的新 bean 實(shí)例。通常,對(duì)于所有有狀態(tài)的 bean,使用 prototype 作用域,對(duì)于無狀態(tài)的 bean,使用 singleton 作用域。

要定義原型作用域,您可以在 bean 配置文件中將作用域?qū)傩栽O(shè)置為 prototype,如下所示:

<!-- 具有 `prototype` 作用域的 `bean` 定義 -->
<bean id="..." class="..." scope="prototype">
   <!-- 此處放置此 `bean` 的協(xié)作者和配置 -->
</bean>

示例

假設(shè)您已經(jīng)準(zhǔn)備好 Eclipse IDE,并采取以下步驟創(chuàng)建 Spring 應(yīng)用程序:

步驟

  • 創(chuàng)建一個(gè)名為 SpringExample 的項(xiàng)目,在創(chuàng)建的項(xiàng)目中的 src 文件夾下創(chuàng)建一個(gè)名為 com.tutorialspoint 的包
  • 使用"Add External JARs"選項(xiàng)添加所需的 Spring 庫
  • 在 com.tutorialspoint 包下創(chuàng)建 Java 類 HelloWorld 和 MainApp
  • 在 src 文件夾下創(chuàng)建 Beans 配置文件 Beans.xml
  • 最后一步是創(chuàng)建所有 Java 文件和 Bean 配置文件的內(nèi)容,并按以下說明運(yùn)行應(yīng)用程序。

以下是 HelloWorld.java 文件的內(nèi)容:

package com.tutorialspoint;
public class HelloWorld {
   private String message;
   public void setMessage(String message){
      this.message  = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
}

以下是 MainApp.java 文件的內(nèi)容:

package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
      objA.setMessage("I'm object A");
      objA.getMessage();
      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
      objB.getMessage();
   }
}

以下是 prototype 作用域所需的 Beans.xml 配置文件的內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld" scope="prototype">
   </bean>
</beans>

當(dāng)您完成創(chuàng)建源代碼和bean配置文件后,讓我們運(yùn)行應(yīng)用程序。如果您的應(yīng)用程序一切正常,它將打印以下消息:

Your Message : I'm object A
Your Message : I'm object A

以上就是Spring IoC容器Bean作用域的singleton與prototype使用配置的詳細(xì)內(nèi)容,更多關(guān)于SpringIoC singleton prototype配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法

    Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狶og4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法。
    2016-11-11
  • 一步步教你JAVA如何優(yōu)化Elastic?Search

    一步步教你JAVA如何優(yōu)化Elastic?Search

    想要榨干Java操作Elasticsearch的所有性能潛力?本指南將一步步教你如何優(yōu)化Java與Elasticsearch的交互!從此,提升ES查詢速度、降低資源消耗不再是難題,趕快一起來探索Java?Elasticsearch優(yōu)化的秘訣吧!
    2024-01-01
  • JAVA十大排序算法之基數(shù)排序詳解

    JAVA十大排序算法之基數(shù)排序詳解

    這篇文章主要介紹了java中的基數(shù)排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 深入解析Apache Kafka實(shí)時(shí)流處理平臺(tái)

    深入解析Apache Kafka實(shí)時(shí)流處理平臺(tái)

    這篇文章主要為大家介紹了Apache Kafka實(shí)時(shí)流處理平臺(tái)深入解析,從基本概念到實(shí)戰(zhàn)操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 使用@Validated注解異常信息的處理方式

    使用@Validated注解異常信息的處理方式

    本文優(yōu)化Spring @Validated參數(shù)校驗(yàn)異常信息,通過MethodArgumentNotValidException和BindingResult提取關(guān)鍵錯(cuò)誤,使用@RestControllerAdvice實(shí)現(xiàn)統(tǒng)一異常處理,提升錯(cuò)誤信息簡潔性及代碼可維護(hù)性
    2025-07-07
  • Spring Data JPA分頁復(fù)合查詢原理解析

    Spring Data JPA分頁復(fù)合查詢原理解析

    這篇文章主要介紹了Spring Data JPA分頁復(fù)合查詢原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java編寫通用的導(dǎo)出任何對(duì)象列表數(shù)據(jù)到excel的工具類

    Java編寫通用的導(dǎo)出任何對(duì)象列表數(shù)據(jù)到excel的工具類

    在工作中經(jīng)常會(huì)遇到列表數(shù)據(jù)的導(dǎo)出,每次需要的時(shí)候都要去開發(fā)一次,且數(shù)據(jù)不斷在變化,所以本文將利用Java編寫一個(gè)工具類可以導(dǎo)出任何對(duì)象列表數(shù)據(jù)到excel,希望對(duì)大家有所幫助
    2024-12-12
  • Java?+?Selenium?+?OpenCV解決自動(dòng)化測試中的滑塊驗(yàn)證問題

    Java?+?Selenium?+?OpenCV解決自動(dòng)化測試中的滑塊驗(yàn)證問題

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac?OS操作系統(tǒng)上,這篇文章主要介紹了Java?+?Selenium?+?OpenCV解決自動(dòng)化測試中的滑塊驗(yàn)證,需要的朋友可以參考下
    2022-07-07
  • Java 數(shù)組交集的實(shí)現(xiàn)代碼

    Java 數(shù)組交集的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java 數(shù)組交集的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java實(shí)現(xiàn)DWG文件轉(zhuǎn)圖片的示例代碼

    java實(shí)現(xiàn)DWG文件轉(zhuǎn)圖片的示例代碼

    在Java中將DWG文件轉(zhuǎn)換為圖片是一個(gè)常見的需求,下面將詳細(xì)介紹如何使用Java將DWG文件轉(zhuǎn)換為圖片,并探討幾個(gè)流行的解決方案,大家可以根據(jù)需要進(jìn)行選擇
    2025-10-10

最新評(píng)論

孟村| 天峨县| 正镶白旗| 武冈市| 云浮市| 灵武市| 桂林市| 凤凰县| 宁都县| 元江| 鄂托克前旗| 恩平市| 河南省| 高邑县| 莒南县| 奇台县| 杭锦后旗| 浪卡子县| 上蔡县| 盐城市| 顺昌县| 屏东县| 长海县| 璧山县| 昂仁县| 隆昌县| 罗源县| 喜德县| 忻城县| 肇源县| 南靖县| 盱眙县| 临泽县| 谢通门县| 梅州市| 简阳市| 大同县| 惠水县| 定日县| 拜城县| 咸阳市|