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

SpringBoot中的bean管理示例詳解

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

一、獲取bean

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

根據(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容器對象
    //獲取bean對象
    @Test
    public void testGetBean() {
        //根據(jù)bean的名稱獲取     //聲明一個bean對象沒有指定名字時,默認(rèn)是類名首字母小寫
        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é)果:

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

二、bean作用域

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

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

1.設(shè)置作用域

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

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

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

三、第三方bean

常見的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文件,下面邏輯是對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這個類上添加@Component注解,但是這個類是read-only,所以不能添加注解將其變成bean對象。

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

在啟動類上添加加一個新的方法,并且添加@Bean注解:

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

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

    @Autowired
    private SAXReader saxReader;
    //第三方bean的管理
    @Test
    public void testThirdBean() throws Exception {
        /** 
		 * SAXReader saxReader = new SAXReader();  //讀取XML文件,
		*/
		//下面邏輯是對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);
    }

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

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

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

相關(guān)文章

  • SpringBoot自定義動態(tài)數(shù)據(jù)源的流程步驟

    SpringBoot自定義動態(tài)數(shù)據(jù)源的流程步驟

    動態(tài)數(shù)據(jù)源,本質(zhì)上是把多個數(shù)據(jù)源存儲在一個?Map?中,當(dāng)需要使用某一個數(shù)據(jù)源時,使用?key?獲取指定數(shù)據(jù)源進(jìn)行處理,本文將給大家介紹一下SpringBoot自定義動態(tài)數(shù)據(jù)源的流程步驟,需要的朋友可以參考下
    2024-06-06
  • Spring?MVC請求處理流程和九大組件詳解

    Spring?MVC請求處理流程和九大組件詳解

    這篇文章主要介紹了Spring?MVC請求處理流程和九大組件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • idea導(dǎo)入若依項目教程

    idea導(dǎo)入若依項目教程

    文章介紹了如何在IntelliJ?IDEA中導(dǎo)入若依管理系統(tǒng)項目,并詳細(xì)步驟包括克隆項目、修改配置文件、創(chuàng)建數(shù)據(jù)庫、運(yùn)行項目和前端展示
    2025-03-03
  • SpringBoot中@Data注解的深度解析與實戰(zhàn)應(yīng)用

    SpringBoot中@Data注解的深度解析與實戰(zhàn)應(yīng)用

    @Data是Lombok庫提供的一個核心注解,它通過簡化Java開發(fā)中常見的樣板代碼來顯著提高開發(fā)效率,下面小編就為大家詳細(xì)介紹一下@Data注解的詳細(xì)使用吧
    2025-10-10
  • java中不同版本JSONObject區(qū)別小結(jié)

    java中不同版本JSONObject區(qū)別小結(jié)

    本文主要介紹了java中不同版本JSONObject區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • java ArrayList集合中的某個對象屬性進(jìn)行排序的實現(xiàn)代碼

    java ArrayList集合中的某個對象屬性進(jìn)行排序的實現(xiàn)代碼

    這篇文章主要介紹了java ArrayList集合中的某個對象屬性進(jìn)行排序的實現(xiàn)代碼,需要的朋友可以參考下
    2016-07-07
  • Java8?CompletableFuture?異步多線程的實現(xiàn)

    Java8?CompletableFuture?異步多線程的實現(xiàn)

    本文主要介紹了Java8?CompletableFuture?異步多線程的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Springboot發(fā)送郵件功能的實現(xiàn)詳解

    Springboot發(fā)送郵件功能的實現(xiàn)詳解

    電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下
    2022-09-09
  • 基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析

    基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析

    在這篇文章里,我們主要討論如何使用Java實現(xiàn)網(wǎng)絡(luò)通信,包括TCP通信、UDP通信、多播以及NIO
    2013-05-05
  • Spring?Boot實現(xiàn)配置文件的自動加載和刷新功能

    Spring?Boot實現(xiàn)配置文件的自動加載和刷新功能

    這篇文章我們介紹了Spring?Boot如何實現(xiàn)配置文件的自動加載和刷新,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-05-05

最新評論

隆安县| 涿鹿县| 三亚市| 遂川县| 阳东县| 五台县| 如皋市| 宁阳县| 武威市| 喀喇沁旗| 伽师县| 上虞市| 赤水市| 繁峙县| 新民市| 盖州市| 肇东市| 雷山县| 沙湾县| 阆中市| 黄大仙区| 德格县| 沧州市| 南汇区| 工布江达县| 开封县| 高陵县| 商水县| 疏勒县| 梓潼县| 古田县| 鸡西市| 文安县| 乐昌市| 浦县| 定州市| 星座| 翁源县| 弋阳县| 武清区| 台北县|