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

Java之Spring Bean 作用域和生命周期

 更新時間:2023年04月06日 11:10:20   作者:Gujiu??!  
這篇文章主要介紹了Java Bean的作用域和生命周期,Bean 的作用域是指 Bean 在 Spring 整個框架中的某種行為模式,所謂的?命周期指的是?個對象從誕?到銷毀的整個?命過程,我們把這個過程就叫做?個對象的?命周期,感興趣的同學(xué)可以參考閱讀

Bean 作用域和生命周期

Bean 作用域

Bean 的作用域是指 Bean 在 Spring 整個框架中的某種行為模式.

比如 singleton 單例作用域, 就表示 Bean 在整個 Spring 中只有一份, 它是全局共享的, 那么當(dāng)其他人修改了這個值之后, 那么另一個人讀取到的就是被修改的值.

Bean 作用域分類

  • singleton: 單例作用域 (默認(rèn)作用域)
  • prototype: 原型作用域 (多例作用域)
  • request: 請求作用域
  • session: 回話作用域
  • application: 全局作用域
  • websocket: HTTP

# 注意 # 后 4 種狀態(tài)是 Spring MVC 中的值,在普通的 Spring 項(xiàng)?中只有前兩種.

singleton

Bean 默認(rèn)情況下是單例狀態(tài)(singleton),也就是所有?的使?的都是同?個對象,之前我們學(xué)單例模式的時候都知道,使用單例可以很大程度上提高性能,所以在 Spring 中Bean 的作用域默認(rèn)也是 singleton 單例模式。

  • 描述:該作用域下的 Bean 在 IoC 容器中只存在?個實(shí)例:獲取 Bean(即通過 applicationContext.getBean 等方法獲?。┘把b配 Bean(即通過 @Autowired 注入)都是同?個對象.
  • 場景:通常無狀態(tài)的 Bean 使用該作用域. (無狀態(tài)表示 Bean 對象的屬性狀態(tài)不需要更新)

prototype

  • 描述:每次對該作用域下的 Bean 的請求都會創(chuàng)建新的實(shí)例:獲取 Bean(即通過 applicationContext.getBean 等方法獲取)及裝配 Bean(即通過 @Autowired 注入)都是新的對象實(shí)例。
  • 場景:通常有狀態(tài)的Bean使?該作用域.

request

  • 描述:每次 http 請求會創(chuàng)建新的 Bean 實(shí)例,類似于prototype
  • 場景:?次 http 的請求和響應(yīng)的共享 Bean
  • 備注:限定 SpringMVC 中使?

session

  • 描述:在?個 http session 中,定義?個 Bean 實(shí)例
  • 場景:?戶回話的共享 Bean , 比如: 記錄?個?戶的登陸信息
  • 備注:限定 SpringMVC 中使?

application (了解)

  • 描述:在?個 http servlet Context 中,定義?個 Bean 實(shí)例
  • 場景:Web 應(yīng)?的上下文信息, 比如:記錄?個應(yīng)用的共享信息
  • 備注:限定 SpringMVC 中使?

websocket (了解)

  • 描述:在?個 HTTP WebSocket 的?命周期中,定義?個 Bean 實(shí)例
  • 場景:WebSocket 的每次會話中,保存了?個 Map 結(jié)構(gòu)的頭信息,將?來包裹客戶端消息頭。第?次初始化后,直到 WebSocket 結(jié)束都是同?個 Bean。
  • 備注:限定 Spring WebSocket 中使?

單例作用域 (singleton) VS 全局作用域 (application)

  • singleton 是 Spring Core 的作用域, application 是 Spring Web 中的作用域.
  • singleton 作用于 IoC 的容器, application 作用于 Servlet 容器

Bean 作用域的設(shè)置

@Scope 標(biāo)簽既可以修飾?法也可以修飾類,@Scope 有兩種設(shè)置?式

使?枚舉設(shè)置:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

@Component
public class UserBeans {
  	@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    @Bean
    public User user1() {
        User user = new User();
        user.setId(1);
        user.setName("Gujiu");
        user.setPassword("123456");
        return user;
    }
}

直接設(shè)置值: @Scope("prototype")

@Component
public class UserBeans {
    @Scope("prototype")
    @Bean
    public User user1() {
        User user = new User();
        user.setId(1);
        user.setName("Gujiu");
        user.setPassword("123456");
        return user;
    }
}

Spring 執(zhí)行流程

  • 啟動容器 (啟動項(xiàng)目)
  • 讀取配置文件 (初始化)
    • 使用 xml 直接注冊 Bean
    • 配置 Bean 根 (掃描) 路徑
  • 將 Bean 存儲到 Spring 中: 通過類注解進(jìn)行掃描和裝配
  • 將 Bean 裝配到需要的類中 (取操作)

Bean 生命周期

所謂的?命周期指的是?個對象從誕?到銷毀的整個?命過程,我們把這個過程就叫做?個對象的?命周期。

Bean 的生命周期:

  • 實(shí)例化 Bean (對應(yīng) JVM 中的 “加載”, 從無到有, 將字節(jié)碼轉(zhuǎn)換成內(nèi)存中的對象, 只是分配了內(nèi)存) [買了一套毛坯房]
  • 設(shè)置屬性 (Bean 的注入和裝配) [購買裝修材料 (引入外部資源)]
  • Bean 初始化 [房子裝修]
    • 實(shí)現(xiàn)了各種 Aware 通知的方法,如 BeanNameAware、BeanFactoryAware、ApplicationContextAware 的接口方法 [打電話給各個裝修的師傅]
    • 執(zhí)行 BeanPostProcessor 初始化前置方法 [師傅勘察環(huán)境, 指定裝修方案 (前置工作)]
    • 執(zhí)行 @PostConstruct 初始化方法,依賴注入操作之后被執(zhí)行 [兩類裝修師傅進(jìn)行裝修]
    • 執(zhí)行自己指定的 init-method 方法 (如果有指定的話) [兩類裝修師傅進(jìn)行裝修]
    • 執(zhí)行 BeanPostProcessor 初始化后置方法 [裝修之后的清理工作]
  • 使用 Bean [房子可以入住使用了]
  • 銷毀 Bean [賣掉房子]

生命周期演示

BeanLifeComponent 類:

//@Component
public class BeanLifeComponent implements BeanNameAware {

    @Override
    public void setBeanName(String s) {
        System.out.println("執(zhí)行了通知");
    }

    @PostConstruct
    public void postConstruct() {
        System.out.println("執(zhí)行了 @PostConstruct");
    }

    public void init() {
        System.out.println("執(zhí)行了 init-method");
    }

    @PreDestroy
    public void preDestroy() {
        System.out.println("執(zhí)行了銷毀方法");
    }
}

xml 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="myComponent" class="com.demo.component.BeanLifeComponent"
          init-method="init" ></bean>
</beans>

調(diào)用類:

public class App2 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("spring-config.xml");
        BeanLifeComponent beanLifeComponent =
                applicationContext.getBean("myComponent", BeanLifeComponent.class);
        System.out.println("使用Bean");
        applicationContext.destroy();
    }
}

運(yùn)行結(jié)果展示:

到此這篇關(guān)于Java之Spring Bean 作用域和生命周期的文章就介紹到這了,更多相關(guān)Spring Bean作用域和生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)Timer的定時調(diào)度函數(shù)schedule的四種用法

    Java實(shí)現(xiàn)Timer的定時調(diào)度函數(shù)schedule的四種用法

    本文主要介紹了Java實(shí)現(xiàn)Timer的定時調(diào)度函數(shù)schedule的四種用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 了解java中的session

    了解java中的session

    這篇文章主要介紹了了解java中的session的相關(guān)問題,什么是session,session怎么用等,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • JVM虛擬機(jī)查找類文件的順序方法

    JVM虛擬機(jī)查找類文件的順序方法

    下面小編就為大家分享一篇JVM虛擬機(jī)查找類文件的順序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Spring Boot項(xiàng)目搭建的兩種方式

    Spring Boot項(xiàng)目搭建的兩種方式

    springboot簡單快捷方便的優(yōu)點(diǎn)深受用戶喜愛,springboot開發(fā)環(huán)境搭建過程是每個開發(fā)者必須要做的工作,今天小編寫的一篇教程關(guān)于Spring Boot項(xiàng)目搭建方法,通過兩種方式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • Java中的HashMap源碼解析

    Java中的HashMap源碼解析

    這篇文章主要介紹了Java中的HashMap源碼解析,當(dāng)HashMap中的其中一個鏈表的對象個數(shù)如果達(dá)到了8個,此時如果數(shù)組長度沒有達(dá)到64,那么HashMap會先擴(kuò)容解決,如果已經(jīng)達(dá)到了64,那么這個鏈表會變成紅黑樹,需要的朋友可以參考下
    2023-12-12
  • MyBatis元素resultMap介紹及使用詳解

    MyBatis元素resultMap介紹及使用詳解

    這篇文章主要介紹了MyBatis元素resultMap介紹及使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 如何使用Java 8 中的 Stream 遍歷樹形結(jié)構(gòu)

    如何使用Java 8 中的 Stream 遍歷樹形結(jié)構(gòu)

    這篇文章主要介紹了使用Java 8中的Stream遍歷樹形結(jié)構(gòu),我們可以使用Java8中的Stream流一次性把數(shù)據(jù)查出來,然后通過流式處理,我們一起來看看,代碼實(shí)現(xiàn)為了實(shí)現(xiàn)簡單,就模擬查看數(shù)據(jù)庫所有數(shù)據(jù)到List里面,需要的朋友可以參考下
    2023-08-08
  • Spring MVC @GetMapping和@PostMapping注解的使用方式

    Spring MVC @GetMapping和@PostMapping注解的使用方式

    這篇文章主要介紹了Spring MVC @GetMapping和@PostMapping注解的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring Boot(四)之使用JWT和Spring Security保護(hù)REST API

    Spring Boot(四)之使用JWT和Spring Security保護(hù)REST API

    這篇文章主要介紹了Spring Boot(四)之使用JWT和Spring Security保護(hù)REST API的相關(guān)知識,需要的朋友可以參考下
    2017-04-04
  • Spring Bean實(shí)例化實(shí)現(xiàn)過程解析

    Spring Bean實(shí)例化實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Spring Bean實(shí)例化實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

伊川县| 石景山区| 浦北县| 珠海市| 曲松县| 柯坪县| 沛县| 无锡市| 安吉县| 青田县| 东莞市| 安福县| 克东县| 武强县| 星座| 宝鸡市| 十堰市| 乌审旗| 沙湾县| 桂平市| 石景山区| 平凉市| 宁明县| 鄂托克旗| 时尚| 镇江市| 毕节市| 肇源县| 惠来县| 浮山县| 横峰县| 和田县| 会昌县| 南投市| 本溪市| 平阴县| 张家界市| 甘德县| 合肥市| 晋江市| 元阳县|