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

Spring Bean作用域與生命周期

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

目錄

Bean的作用域:

Bean有六大行為模式

1、singleton:單例模式(默認(rèn))

2、prototype: 原型模式(多例模式)

3、request: 請(qǐng)求作用域(Spring MVC)

4、session: 會(huì)話(huà)作用域(Spring MVC)

5、application: 全局作用域(Spring MVC)

6、websocket: HTTP WebSocket 作用域(Spring WebSocket)

applicationContext和singleton的區(qū)別?

Bean的生命周期?

1、實(shí)例化(給Bean分配內(nèi)存空間)?

2、設(shè)置屬性(對(duì)象注入)

3、Bean的初始化?

4、使用Bean

5、銷(xiāo)毀Bean?

總結(jié):


Bean的作用域:

一般情況下,對(duì)于變量的可用范圍叫做作用域,或者說(shuō)是定義某個(gè)變量的區(qū)域叫做作用域。?

而B(niǎo)ean的作用域指的是Bean在Spring容器中的行為模式。

Bean有六大行為模式

1、singleton:單例模式(默認(rèn))

singleton是Bean在Spring中默認(rèn)的行為,這個(gè)默認(rèn)的行為模式就是說(shuō)一個(gè)類(lèi)只有一個(gè)Bean對(duì)象,所有的用戶(hù)都使用的同一個(gè)對(duì)象,如果有一個(gè)用戶(hù)對(duì)這個(gè)對(duì)象進(jìn)行了修改,那么所有的結(jié)果都會(huì)發(fā)生改變。

如:這樣一個(gè)User類(lèi):

package com.demo.spring.beans;

public class User {
    private int Id;
    private String name;

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "Id=" + Id +
                ", name='" + name + '\'' +
                '}';
    }
}

我們先使用@Bean注解給Spring中注入一個(gè)User對(duì)象?

package com.demo.spring.beans.Controller.Bean;

import com.demo.spring.beans.User;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;

@Controller
public class UserBean {
    
    @Bean(name = "user")
    //使用getUser方法返回Bean對(duì)象
    public User getUser(){
        User user=new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }
}

?然后使用@Autowired從Spring中獲取到該Bean對(duì)象并進(jìn)行修改:

package com.demo.spring.beans.Controller;

import com.demo.spring.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    private User user1;
    @Autowired
    public User getUser1(){
        User user=user1;
        user.setId(1);
        user.setName("李四");
        return user;
    }

}

然后再使用@Autowired直接從Spring中獲取Bean對(duì)象:

package com.demo.spring.beans.Controller;

import com.demo.spring.beans.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class UserController2 {
    @Autowired
    private User user3;
    public User getUser3() {
        return user3;
    }
}

然后我們?cè)贏pp啟動(dòng)類(lèi)中分別獲取一下UserController和UserController2的Bean對(duì)象:

import com.demo.spring.beans.Controller.UserController;
import com.demo.spring.beans.Controller.UserController2;
import com.demo.spring.beans.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        ApplicationContext context=new
                ClassPathXmlApplicationContext("spring-config.xml");
        UserController userController=  context.getBean("userController", UserController.class);
        User user=userController.getUser1();
        System.out.println("修改后的bean:"+ user);
        UserController2 userController2=context.getBean("userController2",UserController2.class);
        User user1=userController2.getUser3();
        System.out.println("最后獲取的bean:"+user1);
    }
}

結(jié)果如圖:

Spring Bean作用域與生命周期?也就是說(shuō),開(kāi)始的時(shí)候我們的name是張三,經(jīng)過(guò)第一次修改后,變成了李四,最后一個(gè)人在沒(méi)有修改的前提下依然獲得的是李四?。所以我們可以斷定這個(gè)bean是同一個(gè)。也就是說(shuō)Bean的作用域默認(rèn)是Singleton(單例模式)單例可以節(jié)省內(nèi)存開(kāi)銷(xiāo),適合Bean對(duì)象不被隨意更改的場(chǎng)景。

2、prototype: 原型模式(多例模式)

原型模式需要在注入Bean的時(shí)候就進(jìn)行指定,需要在@Bean注解下或者五大類(lèi)注解的下面指定注解:@Scope,并且在注解中指定一個(gè)值為prototype。這樣其他地方獲取Bean的時(shí)候,就不是同一個(gè)了,而是一個(gè)新的Bean實(shí)例。(通常有狀態(tài)的Bean使用該作用域)?

Spring Bean作用域與生命周期?Spring Bean作用域與生命周期

Bean的內(nèi)容容易被修改的場(chǎng)景中適合使用該種作用域。

3、request: 請(qǐng)求作用域(Spring MVC)

每次http請(qǐng)求會(huì)創(chuàng)建新的Bean實(shí)例,類(lèi)似于prototype

場(chǎng)景:?次http的請(qǐng)求和響應(yīng)的共享Bean

備注:限定SpringMVC中使?

4、session: 會(huì)話(huà)作用域(Spring MVC)

在?個(gè)http session中,定義?個(gè)Bean實(shí)例

場(chǎng)景:?戶(hù)回話(huà)的共享Bean, ?如:記錄?個(gè)?戶(hù)的登陸信息

備注:限定SpringMVC中使?

5、application: 全局作用域(Spring MVC)

在?個(gè)http servlet Context中,定義?個(gè)Bean實(shí)例(這個(gè)Bean也是單例的)

場(chǎng)景:Web應(yīng)?的上下?信息,?如:記錄?個(gè)應(yīng)?的共享信息

備注:限定SpringMVC中使?

6、websocket: HTTP WebSocket 作用域(Spring WebSocket)

在?個(gè)HTTP WebSocket的?命周期中,定義?個(gè)Bea實(shí)例

場(chǎng)景:WebSocket的每次會(huì)話(huà)中,保存了?個(gè)Map結(jié)構(gòu)的頭信息,將?來(lái)包裹客戶(hù)端消息頭。第?次初始化后,直WebSocket結(jié)束都是同?個(gè)Bean。

備注:限定Spring WebSocket中使?

applicationContext和singleton的區(qū)別?

1、作用域不一樣:singleton是Spring Core的作用域,而application是Spring Web中的作用域。

2、作用的容器不一樣:singleton是作用于Spring IOC的容器,而application是作用于Servlet的容器。

Bean的生命周期?

1、實(shí)例化(給Bean分配內(nèi)存空間)?

2、設(shè)置屬性(對(duì)象注入)

3、Bean的初始化?

①執(zhí)行各種通知(執(zhí)行各種 Aware)
②執(zhí)行初始化的前置方法(BeanPostProcessor)
③ 執(zhí)行構(gòu)造方法,兩種執(zhí)行方式,一種是執(zhí)行 @PostConstruct,另一種實(shí)質(zhì)性 init-method
④ 執(zhí)行初始化的后置方法(BeanPostProcessor)

4、使用Bean

5、銷(xiāo)毀Bean?

執(zhí)行銷(xiāo)毀容器的各種方法,例如@PreDestroyDisposableBean方法、destroy-method方法。

總結(jié):

Spring Bean作用域與生命周期文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431212.html

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • Bean 作用域、生命周期和Spring執(zhí)行流程

    Bean 作用域、生命周期和Spring執(zhí)行流程

    假設(shè)現(xiàn)在有?個(gè)公共的 Bean,提供給 A ?戶(hù)和 B ?戶(hù)使?,然?在使?的途中 A ?戶(hù)卻“悄悄”地修改了公共 Bean 的數(shù)據(jù),導(dǎo)致 B ?戶(hù)在使?時(shí)發(fā)?了預(yù)期之外的邏輯錯(cuò)誤。 我們可以看到,B 用戶(hù)在使用這個(gè)Bean對(duì)象時(shí),得到的Dog是被A 用戶(hù)修改過(guò)的,這無(wú)疑會(huì)給 B 用戶(hù)帶來(lái)很

    2024年02月12日
    瀏覽(28)
  • 【Spring】Bean的作用域和生命周期

    【Spring】Bean的作用域和生命周期

    目錄 一、引入案例來(lái)探討B(tài)ean的作用域 二、Bean的作用域 2.1、Bean的6種作用域 2.2、設(shè)置Bean的作用域 三、Spring的執(zhí)行流程 ?四、Bean的聲明周期 1、生命周期演示 首先我們創(chuàng)建一個(gè)User類(lèi),定義一個(gè)用戶(hù)信息,在定義一個(gè)Users類(lèi),使用方法注解將user存入Spring中,然后兩個(gè)用戶(hù)A對(duì)這

    2024年02月14日
    瀏覽(24)
  • Spring Bean的作用域及生命周期

    Spring Bean的作用域及生命周期

    目錄 前言: Bean的作用域(Scope) 單例模式 原型模式(多例作用域) 請(qǐng)求作用域(request) 會(huì)話(huà)作用域 全局作用域 網(wǎng)絡(luò)長(zhǎng)連接 Spring執(zhí)行流程 Bean的生命周期 測(cè)試 小結(jié): ? ? 使用Spring框架時(shí),我們需要清楚Spring托管Bean的作用域和生命周期,這樣使用框架才會(huì)更加得心應(yīng)手。

    2024年02月03日
    瀏覽(22)
  • Spring Bean的作用域和生命周期

    Spring Bean的作用域和生命周期

    Bean 的作用域指的是 Bean 在 Spring 容器中的行為(Bean 實(shí)例創(chuàng)建及生命周期),它的行為是由 Spring 來(lái)管理的,可以根據(jù)具體情況選擇不同的作用域來(lái)達(dá)到性能優(yōu)化、資源利用最大化和可維護(hù)性等目的。 Bean 作用域(Scope)類(lèi)型主要有如下幾種: 其中前兩種是 Spring 核心作用域,

    2024年02月12日
    瀏覽(28)
  • Spring中Bean的作用域和Spring生命周期

    Spring中Bean的作用域和Spring生命周期

    從前面的文章中我們看出Spring是用來(lái)存儲(chǔ)和讀取Bean的,因此Spring中Bean是最核心的資源,所以我們將對(duì)Bean進(jìn)行深入的理解。 現(xiàn)在有一個(gè)公共的Bean,提供給了兩個(gè)用戶(hù)去使用,但是在使用過(guò)程中,用戶(hù)一修改了公共的Bean數(shù)據(jù),當(dāng)用戶(hù)2在使用時(shí),卻發(fā)現(xiàn)產(chǎn)生了邏輯上的錯(cuò)誤。

    2024年02月16日
    瀏覽(25)
  • 5、Spring之bean的作用域和生命周期

    5、Spring之bean的作用域和生命周期

    5.1.1.1、配置bean 注意:當(dāng)bean不配置scope屬性時(shí),默認(rèn)是singleton(單例) 5.1.1.2、測(cè)試 由控制臺(tái)日志可知,此時(shí)ioc獲取到的兩個(gè)bean本質(zhì)上是同一個(gè)對(duì)象 5.1.2.1、配置bean 5.1.2.2、測(cè)試 由控制臺(tái)日志可知,此時(shí)ioc獲取到的兩個(gè)bean本質(zhì)上是不同的對(duì)象 如果是在WebApplicationContext環(huán)境下

    2024年02月14日
    瀏覽(24)
  • Spring系列4 -- Bean的作用域和生命周期

    Spring系列4 -- Bean的作用域和生命周期

    目錄 1. 案例 2. 作用域定義 2.1 Bean的6種作用域 2.2 設(shè)置作用域 3. Sring的執(zhí)行流程 4. Bean的生命周期 思考: 為什么不是先進(jìn)行初始化然后再進(jìn)行設(shè)置屬性呢? ????????假設(shè)現(xiàn)在有?個(gè)公共的 Bean,提供給 A ?戶(hù)和 B ?戶(hù)使?,然?在使?的途中 A ?戶(hù)卻“悄悄”地修改了公共

    2024年02月15日
    瀏覽(24)
  • 【Spring 】執(zhí)行流程解析:了解Bean的作用域及生命周期

    【Spring 】執(zhí)行流程解析:了解Bean的作用域及生命周期

    ?哈嘍,哈嘍,大家好~ 我是你們的老朋友: 保護(hù)小周?? ? 今天給大家?guī)?lái)的是 Spring 項(xiàng)目的執(zhí)行流程解析? 和 Bean 對(duì)象的6 種作用域 以及 生命周期 , 本文將為大家講解,一起來(lái)看看叭~ 本期收錄于博主的專(zhuān)欄 :JavaEE_保護(hù)小周?的博客-CSDN博客 適用于編程初學(xué)者,感興趣

    2024年02月16日
    瀏覽(23)
  • 【JavaEE】深入了解Spring中Bean的可見(jiàn)范圍(作用域)以及前世今生(生命周期)

    【JavaEE】深入了解Spring中Bean的可見(jiàn)范圍(作用域)以及前世今生(生命周期)

    【JavaEE】Spring的開(kāi)發(fā)要點(diǎn)總結(jié)(4) 在學(xué)習(xí)Spring中,Bean是最核心的操作資源 使用學(xué)習(xí)Bean對(duì)象是一個(gè)重點(diǎn),我們已經(jīng)知道如何存儲(chǔ)它,獲取它,現(xiàn)在我們要知道: 它的作用域,我們才可以知道怎么使用,才能得心應(yīng)手,符合預(yù)期~ 它的生命周期,我們才能更加清楚的了解它的

    2024年02月14日
    瀏覽(26)
  • 【Spring學(xué)習(xí)】Bean對(duì)象的作用域和生命周期,了解了這些你就真正熟悉spring框架了.

    【Spring學(xué)習(xí)】Bean對(duì)象的作用域和生命周期,了解了這些你就真正熟悉spring框架了.

    前言: 大家好,我是 良辰丫 ,我們已經(jīng)學(xué)會(huì)了Spring的存取,今天我們將一起來(lái)學(xué)習(xí)Bean對(duì)象的作用域和生命周期.?????? ??個(gè)人主頁(yè):良辰針不戳 ??所屬專(zhuān)欄:javaEE進(jìn)階篇之框架學(xué)習(xí) ??勵(lì)志語(yǔ)句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。 ??期

    2024年02月07日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包