亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot中的bean管理示例詳解

 更新時(shí)間:2023年06月28日 15:15:34   作者:曼諾爾雷迪亞茲  
這篇文章主要介紹了SpringBoot中的bean管理,本文結(jié)合示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、獲取bean

1.默認(rèn)情況下,Spring項(xiàng)目啟動(dòng)時(shí),會(huì)把bean都創(chuàng)建好放在IOC容器中,如果想要主動(dòng)獲取這些bean,可以通過(guò)如下方式:

根據(jù)name獲取bean:

object getBean (String name)

根據(jù)類型獲取bean:

<T> T getBean (Class<T> requiredType)

根據(jù)name獲取bean(帶類型轉(zhuǎn)換) :

<T> TgetBean(String name,Class<T> requiredType)

示例:

package com.itheima;
import com.itheima.controller.DeptController;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
@SpringBootTest
class SpringbootWebConfig2ApplicationTests {
    @Autowired
    private ApplicationContext applicationContext;  //IOC容器對(duì)象
    //獲取bean對(duì)象
    @Test
    public void testGetBean() {
        //根據(jù)bean的名稱獲取     //聲明一個(gè)bean對(duì)象沒(méi)有指定名字時(shí),默認(rèn)是類名首字母小寫(xiě)
        DeptController bean1 = (DeptController) applicationContext.getBean("deptController");
        System.out.println(bean1);
        //根據(jù)bean的類型獲取
        DeptController bean2 = applicationContext.getBean(DeptController.class);
        System.out.println(bean2);
        //根據(jù)bean的名稱及類型獲取
        DeptController bean3 = applicationContext.getBean("deptController", DeptController.class);
        System.out.println(bean3);
    }

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

上述所說(shuō)的【Spring項(xiàng)目啟動(dòng)時(shí),會(huì)把其中的bean都創(chuàng)建好】還會(huì)受到作用域延遲初始化影響,這里主要針對(duì)于默認(rèn)的單例 非延遲加載的bean而言。

二、bean作用域

spring支持五種作用域,后三種在web環(huán)境才生效:

作用域說(shuō)明
singleton容器內(nèi)同名稱的bean只有一個(gè)實(shí)例(單例)(默認(rèn))
prototype每次使用該 bean時(shí)會(huì)創(chuàng)建新的實(shí)例(非單例)
request每個(gè)請(qǐng)求范圍內(nèi)會(huì)創(chuàng)建新的實(shí)例(web環(huán)境中,了解)
session每個(gè)會(huì)話范圍內(nèi)會(huì)創(chuàng)建新的實(shí)例((web環(huán)境中,了解)
application每個(gè)應(yīng)用范圍內(nèi)會(huì)創(chuàng)建新的實(shí)例(web環(huán)境中,了解)

1.設(shè)置作用域

可以通過(guò)@Scope注解來(lái)進(jìn)行配置作用域:

//@Lazy   //延遲初始化 --延遲到第一次使用的時(shí)候
@Scope("prototype")  //將作用域設(shè)置為非單例的prototype--每次調(diào)用后bean對(duì)象都不同
@RestController
@RequestMapping("/depts")
public class DeptController {
}

默認(rèn)singleton的bean,在容器啟動(dòng)時(shí)被創(chuàng)建,可以使用@Lazy注解來(lái)延遲初始化(延遲到第一次使用時(shí))。prototype的bean,每一次使用該bean的時(shí)候都會(huì)創(chuàng)建一個(gè)新的實(shí)例。實(shí)際開(kāi)發(fā)當(dāng)中,絕大部分的Bean是單例的,也就是說(shuō)絕大部分Bean不需要配置scope屬性。

三、第三方bean

常見(jiàn)的bean管理的類@Component @Controller @Service @Repository.但是存在第三方的bean–比如:引入的第三方依賴的bean,*示例:為了解析XML文件所添加到pom的依賴:

<!--Dom4j-->
<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version>
</dependency>

* test中的類:

    //第三方bean的管理
    @Test
    public void testThirdBean() throws Exception {
        SAXReader saxReader = new SAXReader();  //讀取XML文件,下面邏輯是對(duì)XML文件的解析
        Document document = saxReader.read(this.getClass().getClassLoader().getResource("1.xml"));
        Element rootElement = document.getRootElement();
        String name = rootElement.element("name").getText();
        String age = rootElement.element("age").getText();
        System.out.println(name + " : " + age);
    }

按照之前的學(xué)習(xí),我們就需要在SAXReader這個(gè)類上添加@Component注解,但是這個(gè)類是read-only,所以不能添加注解將其變成bean對(duì)象。

如果要管理的bean對(duì)象來(lái)自于第三方(不是自定義的),是無(wú)法用@Component 及衍生注解聲明bean的,就需要用到@Bean注解。

在啟動(dòng)類上添加加一個(gè)新的方法,并且添加@Bean注解:

//聲明第三方bean
@Bean  //將當(dāng)前方法的返回值對(duì)象交給Ioc容器管理,成為IOC容器bean
public SAXReader saxReader() {
    return new SAXReader();
}

現(xiàn)在可以在讀取XML文件的類上添加@Autowried注解來(lái)注入這個(gè)類的bean對(duì)象:

    @Autowired
    private SAXReader saxReader;
    //第三方bean的管理
    @Test
    public void testThirdBean() throws Exception {
        /** 
		 * SAXReader saxReader = new SAXReader();  //讀取XML文件,
		*/
		//下面邏輯是對(duì)XML文件的解析
        Document document = saxReader.read(this.getClass().getClassLoader().getResource("1.xml"));
        Element rootElement = document.getRootElement();
        String name = rootElement.element("name").getText();
        String age = rootElement.element("age").getText();
		//輸出XML中的數(shù)據(jù)(解析后)
        System.out.println(name + " : " + age);
    }

缺點(diǎn):若要管理的第三方bean對(duì)象,建議對(duì)這些bean進(jìn)行集中分類配置,而不是如上放在啟動(dòng)類中,可以通過(guò)@Configuration注解聲明一個(gè)配置類。

  • 通過(guò)@Bean注解的name或value屬性可以聲明bean的名稱,如果不指定,默認(rèn)bean的名稱就是方法名。
  • 如果第三方bean需要依賴其它bean對(duì)象,直接在bean定義方法中設(shè)置形參即可,容器會(huì)根據(jù)類型自動(dòng)裝配。

到此這篇關(guān)于SpringBoot中的bean管理的文章就介紹到這了,更多相關(guān)SpringBoot bean管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux環(huán)境下java程序打包成簡(jiǎn)單的hello world輸出jar包示例

    linux環(huán)境下java程序打包成簡(jiǎn)單的hello world輸出jar包示例

    這篇文章主要介紹了linux環(huán)境下java程序打包成簡(jiǎn)單的hello world輸出jar包,結(jié)合簡(jiǎn)單hello world輸出程序示例分析了Linux環(huán)境下的java可執(zhí)行jar包文件的生成相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • java統(tǒng)計(jì)字符串單詞個(gè)數(shù)的方法解析

    java統(tǒng)計(jì)字符串單詞個(gè)數(shù)的方法解析

    在一些項(xiàng)目中可能需要對(duì)一段字符串中的單詞進(jìn)行統(tǒng)計(jì),本文在這里分享了一個(gè)簡(jiǎn)單的demo,有需要的朋友可以拿去看一下
    2017-01-01
  • Java實(shí)現(xiàn)獲取圖片和視頻文件的Exif信息

    Java實(shí)現(xiàn)獲取圖片和視頻文件的Exif信息

    這篇文章將重點(diǎn)為大家介紹一下如何使用Java編程語(yǔ)言結(jié)合metadata-extractor去自動(dòng)獲取全景圖片的Exif信息,獲取照片的拍攝坐標(biāo)信息,感興趣的可以了解一下
    2022-11-11
  • java計(jì)算值所占的百分比,結(jié)果為100%問(wèn)題

    java計(jì)算值所占的百分比,結(jié)果為100%問(wèn)題

    這篇文章主要介紹了java計(jì)算值所占的百分比,結(jié)果為100%問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java內(nèi)存屏障詳解

    Java內(nèi)存屏障詳解

    文章主要介紹了內(nèi)存屏障的必要性,以及在多核處理器中如何通過(guò)內(nèi)存屏障來(lái)保證多線程程序的內(nèi)存可見(jiàn)性和防止指令亂序執(zhí)行,文章還詳細(xì)解釋了內(nèi)存屏障的作用、原理以及常見(jiàn)處理器中的重排序類型
    2025-01-01
  • 深入剖析理解AsyncGetCallTrace源碼底層原理

    深入剖析理解AsyncGetCallTrace源碼底層原理

    這篇文章主要為大家介紹了AsyncGetCallTrace源碼的深層原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程

    Win11系統(tǒng)下載安裝java的詳細(xì)過(guò)程

    這篇文章主要介紹了Win11如何下載安裝java,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • java變量的聲明與賦值分離規(guī)范示例

    java變量的聲明與賦值分離規(guī)范示例

    這篇文章主要為大家介紹了java變量的聲明與賦值分離規(guī)范示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java文件下載設(shè)置中文名稱的實(shí)例(response.addHeader)

    java文件下載設(shè)置中文名稱的實(shí)例(response.addHeader)

    下面小編就為大家分享一篇java文件下載設(shè)置中文名稱的實(shí)例(response.addHeader),具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12
  • Java單例的寫(xiě)法詳解

    Java單例的寫(xiě)法詳解

    在java中,單例有很多種寫(xiě)法,面試時(shí),手寫(xiě)代碼環(huán)節(jié),除了寫(xiě)算法題,有時(shí)候也會(huì)讓手寫(xiě)單例模式,這里記錄一下單例的幾種寫(xiě)法和優(yōu)缺點(diǎn)。需要的朋友可以參考下
    2021-09-09

最新評(píng)論