国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring 中 Bean 的生命周期

這篇具有很好參考價(jià)值的文章主要介紹了Spring 中 Bean 的生命周期。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在您的應(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) 屬性和描述
1 class
這是必填屬性,指定要用于創(chuàng)建 beanbean 類。
2 name
此屬性唯一地指定 bean 標(biāo)識(shí)符。在基于 XML 的配置元數(shù)據(jù)中,您可以使用 id 和/或 name 屬性來指定 bean 標(biāo)識(shí)符。
3 scope
此屬性指定從特定 bean 定義創(chuàng)建的對(duì)象的范圍
4 constructor-arg
這用于注入依賴項(xiàng)
5 properties
這用于注入依賴項(xiàng)
6 autowiring mode
這用于注入依賴項(xiàng)
7 lazy-initialization mode
延遲初始化的 bean 告訴 IoC 容器在首次請(qǐng)求時(shí)創(chuàng)建 bean 實(shí)例,而不是在啟動(dòng)時(shí)創(chuàng)建。
8 initialization method
在容器設(shè)置了 bean 的所有必需屬性之后,要調(diào)用的回調(diào)函數(shù)
9 destruction 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è)簡(jiǎn)單的 `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ū)傩月暶鳛?prototype。類似地,如果您希望 Spring 每次需要時(shí)返回相同的 bean 實(shí)例,您應(yīng)該將 bean 的作用域?qū)傩月暶鳛?singleton

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

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

步驟

  1. 創(chuàng)建一個(gè)名為 SpringExample 的項(xiàng)目,在創(chuàng)建的項(xiàng)目中的 src 文件夾下創(chuàng)建一個(gè)名為 com.tutorialspoint 的包
  2. 使用"Add External JARs"選項(xiàng)添加所需的 Spring
  3. com.tutorialspoint 包下創(chuàng)建 JavaHelloWorldMainApp
  4. src 文件夾下創(chuàng)建 Beans 配置文件 Beans.xml
  5. 最后一步是創(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 容器將在每次請(qǐng)求特定 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)用程序:

步驟

  1. 創(chuàng)建一個(gè)名為 SpringExample 的項(xiàng)目,在創(chuàng)建的項(xiàng)目中的 src 文件夾下創(chuàng)建一個(gè)名為 com.tutorialspoint 的包
  2. 使用"Add External JARs"選項(xiàng)添加所需的 Spring
  3. com.tutorialspoint 包下創(chuàng)建 JavaHelloWorldMainApp
  4. src 文件夾下創(chuàng)建 Beans 配置文件 Beans.xml
  5. 最后一步是創(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

最后

為了方便其他設(shè)備和平臺(tái)的小伙伴觀看往期文章:

微信公眾號(hào)搜索:Let us Coding,關(guān)注后即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點(diǎn)贊、收藏、關(guān)注文章來源地址http://www.zghlxwxcb.cn/news/detail-704913.html

到了這里,關(guān)于Spring 中 Bean 的生命周期的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Spring】—— bean生命周期

    1、初始化容器 1)創(chuàng)建對(duì)象(分配內(nèi)存) 2)執(zhí)行構(gòu)造方法 3)執(zhí)行屬性注入(set操作) 4)執(zhí)行bean初始化方法 2、使用bean 1)執(zhí)行業(yè)務(wù)操作 3、關(guān)閉/銷毀容器 1)執(zhí)行bean銷毀方法

    2024年02月02日
    瀏覽(28)
  • Spring bean 生命周期

    Spring bean 生命周期

    在互聯(lián)網(wǎng)領(lǐng)域中,Spring框架扮演著重要的角色。作為一個(gè)開源的Java應(yīng)用程序開發(fā)框架,Spring提供了一種靈活而強(qiáng)大的方式來構(gòu)建可擴(kuò)展的應(yīng)用程序。Spring框架中的一個(gè)重要概念是Bean,它是Spring應(yīng)用程序的基本構(gòu)建塊之一。了解Spring Bean的生命周期對(duì)于充分利用Spring框架的功能

    2024年02月11日
    瀏覽(26)
  • Spring:Bean生命周期

    Spring:Bean生命周期

    Bean 生命周期 是 bean 對(duì)象從創(chuàng)建到銷毀的整個(gè)過程。 簡(jiǎn)單的 Bean 生命周期的過程: 1.實(shí)例化(調(diào)用構(gòu)造方法對(duì) bean 進(jìn)行實(shí)例化) 2.依賴注入(調(diào)用 set 方法對(duì) bean 進(jìn)行賦值) 3.初始化(手動(dòng)配置 xml 文件中 bean 標(biāo)簽的 init-method 屬性值,來指定調(diào)用對(duì)應(yīng)的初始化方法) 4.使用

    2024年02月13日
    瀏覽(27)
  • 【Spring】Bean的作用域與生命周期詳情:請(qǐng)簡(jiǎn)述Spring的執(zhí)行流程并分析Bean的生命周期?

    【Spring】Bean的作用域與生命周期詳情:請(qǐng)簡(jiǎn)述Spring的執(zhí)行流程并分析Bean的生命周期?

    ?我們都知道,Spring框架為開發(fā)人員提供了很多便捷,這使得開發(fā)人員能夠更加專注于應(yīng)用程序的核心業(yè)務(wù)邏輯,而不需要花費(fèi)大量時(shí)間和精力在技術(shù)細(xì)節(jié)上。作為一個(gè)包含眾多工具方法的IoC容器,存取JavaBean是其極為重要的一個(gè)環(huán)節(jié)。本文就對(duì)Spring中的Bean的作用域和生命周

    2024年02月12日
    瀏覽(27)
  • 【spring】spring bean的生命周期

    【spring】spring bean的生命周期

    spring bean的生命周期 簡(jiǎn)介 本文測(cè)試并且介紹了spring中bean的生命周期,如果只想知道結(jié)果可以跳到最后一部分直接查看。 一、bean的創(chuàng)建階段 spring中的bean是何時(shí)創(chuàng)建的? 在spring中有一個(gè)非常重要的注解,叫做**@Scope**,這個(gè)注解是用來控制spring中的bean是否是單例的,一般情況

    2024年02月15日
    瀏覽(28)
  • Spring Bean的生命周期

    Spring Bean的生命周期

    Bean生命周期的整個(gè)執(zhí)行過程描述如下: 1、根據(jù)配置情況調(diào)用Bean構(gòu)造方法或工廠方法實(shí)例化 Bean。 2、利用依賴注入完成Bean中所有屬性值的配置注入。 3、如果Bean 實(shí)現(xiàn)了BeanNameAware 接口,則 Spring調(diào)用Bean的setBeanName()方法傳入當(dāng)前Bean的id值。 4、如果Bean實(shí)現(xiàn)了BeanFactoryAware 接口

    2023年04月22日
    瀏覽(35)
  • Spring -- Bean的生命周期

    Spring -- Bean的生命周期

    Spring容器在進(jìn)行實(shí)例化時(shí),會(huì)將xml配置的bean的信息封裝成一個(gè)BeanDefinition對(duì)象,Spring根據(jù)BeanDefinition來創(chuàng)建Bean對(duì)象,里面有很多的屬性用來描述Bean? ?BeanDefinition 中幾個(gè)重要方法如下 beanClassName:bean 的類名 initMethodName:初始化方法名稱 properryValues:bean 的屬性值 scope:作用域

    2024年02月15日
    瀏覽(35)
  • 【Spring】Spring的Bean的生命周期

    【Spring】Spring的Bean的生命周期

    作者簡(jiǎn)介:大家好,我是五度魚,一個(gè)普通的Java領(lǐng)域博主,不停輸出Java技術(shù)博客和干貨 。 座右銘:鍥而不舍,金石可鏤 。 個(gè)人主頁:五度魚學(xué)Java的主頁 在 Java 中, Bean 是一個(gè)重要的概念,它代表了應(yīng)用程序中的一個(gè)對(duì)象。在開發(fā)中,我們經(jīng)常使用 Bean 來管理對(duì)象的生命

    2024年01月16日
    瀏覽(35)
  • Spring整理-Spring Bean的生命周期

    Spring?Bean的生命周期涉及多個(gè)階段,從Bean的定義到其銷毀。在這個(gè)過程中,Spring容器負(fù)責(zé)創(chuàng)建、初始化、使用和最終銷毀Bean。了解這個(gè)生命周期有助于更好地管理Bean的行為和資源使用。 實(shí)例化(Instantiation): 容器首先創(chuàng)建Bean的實(shí)例。 填充屬性(Populate?Properties): 容器

    2024年01月21日
    瀏覽(31)
  • Spring 中 Bean 的生命周期

    在您的應(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 的生命

    2024年02月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包