<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
限定程式中變數的可用範圍叫做作用域,或者說在原始碼中定義變數的某個區域就叫做作用域。
而 Bean 的作用域是指 Bean 在 Spring 整個框架中的某種行為模式,比如 singleton 單例作用域,就表示 Bean 在整個 Spring 中只有一份,它是全域性共用的,那麼當其他人修改了這個值之後,那麼另一個人讀取到的就是被修改的值。
Spring 容器在初始化一個 Bean 的範例時,同時會指定該範例的作用域。Spring有 6 種作用域,最後四種是基於 Spring MVC 生效的:
注意後 4 種狀態是 Spring MVC 中的值,在普通的 Spring 專案中只有前兩種。
1,2為Spring普通專案(Spring Core) 3,4,5為Spring MVC 6屬於Spring WebSocket
singleton
prototype
request
session
application(瞭解)
websocket(瞭解)
singleton 是 Spring Core 的作用域;
application 是 Spring Web 中的作用域;
singleton 作 於 IoC 的容器, application 作 於 Servlet 容器。
使用@Scope
標籤就可以宣告Bean的作用域,比如設定Bean的作用域
@Scope
標籤可以修飾方法,也可以修飾類,@Scope
有兩種設定方式:
1.直接設定值:@Scope("prototype")
2.直接列舉設定:@Scope("ConfigurableBeanFactory.SCOPE_PROTOTYPE")
Bean 執行 流程(Spring 執 流程):啟動 Spring 容器 -> 範例化 Bean(分配記憶體空間,從 到有) -> Bean 註冊到 Spring 中(存操作) -> 將 Bean 裝配到需要的類中(取操作)。
所謂的生命週期指的是一個物件從誕生到銷燬的整個生命過程,我們把這個過程就叫做一個物件的生命週期。
Bean 的生命週期分為以下 5 部分:
範例化 Bean(為 Bean 分配記憶體空間)【範例化!=初始化;只是執行分配記憶體空間的功能】
設定屬性(Bean 注入和裝配)【執行依賴類的注入A需要使用B的方法,先初始化並將B載入到當前類】
Bean 初始化
@PostConstruct
初始化方法,依賴注入操作之後被執行;使用Bean
銷燬 Bean
銷燬容器的各種 法,如 @PreDestroy、DisposableBean 介面方法、destroy-method。
執行流程如下圖所示:
範例化和初始化的區別
範例化和屬性設定是 Java 級別的系統“事件”,其操作過程不可人工干預和修改;而初始化是給開發者提供的,可以在範例化之後,類載入完成之前進行自定義“事件”處理。
生命流程的“故事”
Bean 的生命流程看似繁瑣,但咱們可以以生活中的場景來理解它,比如我們現在需要買一棟房子,那麼我們的流程是這樣的:
生命週期演示:
package com.beans; import org.springframework.beans.factory.BeanNameAware; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class BeanLifeComponent implements BeanNameAware { @PostConstruct public void postConstruct() { System.out.println("執行 PostConstruct()"); } public void init() { System.out.println("執行 BeanLifeComponent init-method"); } public void destory() { System.out.println("執行了 destory 方法"); } @PreDestroy public void preDestroy() { System.out.println("執行:preDestroy()"); } public void setBeanName(String s) { System.out.println("執行了 setBeanName 方法:" + s); } }
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"> <!-- 設定需要儲存到 spring 中的 bean 根目錄 --> <content:component-scan base-package="com.beans"></content:component-scan> <bean id="beanlife" class="com.beans.BeanLifeComponent" init-method="init" destroy-method="destory"></bean> </beans>
呼叫類:
package com; import com.beans.BeanLifeComponent; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App2 { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); BeanLifeComponent beanLifeComponent = context.getBean(BeanLifeComponent.class); System.out.println("執行銷燬方法"); beanLifeComponent.destory(); // 執行銷燬方法 } }
步驟 2 和步驟 3 的順序不能打個顛倒!!!
到此這篇關於Spring Bean作用域與生命週期深入講解的文章就介紹到這了,更多相關Spring Bean作用域與生命週期內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45