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

Spring Boot 自動裝配的幾種用法示例小結(jié)

 更新時間:2025年07月23日 11:15:31   作者:何中應  
文章介紹了SpringBoot自動裝配的多種用法,包括基礎(chǔ)的@Bean注冊、策略模式通過applicationContext獲取指定Service實現(xiàn)類,以及高級的獲取接口所有實現(xiàn)類集合和Map映射,感興趣的朋友跟隨小編一起看看吧

說明:自動裝配是Spring Boot框架的一大特點,簡單說,是項目啟動時,自動創(chuàng)建一系列Bean對象。

本文介紹幾個借助Spring Boot自動裝配的用法。

基礎(chǔ)用法

用法一:基本操作

最基礎(chǔ)的用法是用 @Bean 注解,手動將對象放入到 Spring Boot 的IOC容器中,其他地方就可以使用 @Autowired 注解直接使用該對象。

如下:

(某個類對象,注意類上沒有額外加注解)

public class DemoService {
    public String test() {
        return "test";
    }
}

(將對象放入到 IOC 容器中)

import com.hezy.service.DemoService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AutoBeanConfiguration {
    @Bean
    public DemoService testBean() {
        return new DemoService();
    }
}

(直接注入使用)

import com.hezy.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class DemoController {
    @Autowired
    private DemoService demoService ;
    @GetMapping
    public String sayHello() {
        return demoService.test();
    }
}

啟動項目,調(diào)用,正常返回結(jié)果

另外,使用 @Bean 注解將對象放入 IOC 容器,需要配合類上的 @Configuration 注解,所以通常來說,我們都會創(chuàng)建一個配置類,將需要實例化的 Bean 對象都放入到這個配置類中,最后再使用服務注冊的方式,將這個配置的全限定類名放到 META-INF 文件下的 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件里,這樣其他引入該模塊的其他模塊,就能直接注入該模塊的 Bean 對象。

用法二:獲取指定Service

在一些場景,比如將數(shù)據(jù)生成文件(excel、word、pdf),我們需要根據(jù)配置來調(diào)用指定的 Service 實現(xiàn)類(ExcelServiceImpl、WordServiceImpl、PdfServiceImpl),我們通常的做法是給這些 Service 設(shè)置一個名稱,然后使用 applicationContext 的 ap i獲取指定實現(xiàn)類調(diào)用。

如下:

(創(chuàng)建一個寫服務接口,其他具體實現(xiàn)類實現(xiàn)該接口)

/**
 * 寫服務接口
 */
public interface WriteService {
    String write(String content);
}

(excel實現(xiàn)類)

import org.springframework.stereotype.Service;
/**
 * excel實現(xiàn)類
 */
@Service("excel")
public class ExcelServiceIImpl implements WriteService {
    @Override
    public String write(String content) {
        return "excel:" + content;
    }
}

(word實現(xiàn)類)

import org.springframework.stereotype.Service;
/**
 * word實現(xiàn)類
 */
@Service("word")
public class WordServiceImpl implements WriteService {
    @Override
    public String write(String content) {
        return "word:" + content;
    }
}

(pdf實現(xiàn)類)

import org.springframework.stereotype.Service;
/**
 * pdf實現(xiàn)類
 */
@Service("pdf")
public class PdfServiceImpl implements WriteService {
    @Override
    public String write(String content) {
        return "pdf:" + content;
    }
}

(使用,使用 applicationContext 的 getBean方法獲取指定實現(xiàn)類調(diào)用其方法執(zhí)行)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@Service
public class TestService {
    @Autowired
    private ApplicationContext applicationContext;
    public String test(String type, String content) {
        return applicationContext.getBean(type, WriteService.class).write(content);
    }
}

(具體使用哪一個實現(xiàn)類,來自前端傳遞的參數(shù))

    @Autowired
    private TestService testService;
    @GetMapping("/write")
    public String write(String type, String content) {
        return testService.test(type, content);
    }

啟動項目,傳遞執(zhí)行寫操作的類型及內(nèi)容,如下。這樣就很方便了,是策略模式的一種體現(xiàn)。

高級用法

用法一:獲取某接口的所有實現(xiàn)類

假設(shè)一個場景,我們需要獲取某接口的所有實現(xiàn)類,依次執(zhí)行,返回最終結(jié)果。這時我們可以通過下面這種方式,直接獲取所有實現(xiàn)類的集合:

    @Autowired
    private List<WriteService> writeServices;
    public String test2() {
        return writeServices.size() + "";
    }

啟動項目,調(diào)用接口,打斷點查看集合,可見該接口的所有實現(xiàn)類

這種用法場景挺多的,作者在實際開發(fā)中也遇到過??梢詤⒖聪旅孢@兩篇博客介紹:

用法二:獲取具體實現(xiàn)類的Map映射

在前面基礎(chǔ)用法中,我們提到獲取指定 Service 可以使用 applicationContext 的 api,其實更簡單的可以直接使用下面這種方式:

    @Autowired
    private Map<String, WriteService> writeServiceMap;
    public String test3() {
        return writeServiceMap.size() + "";
    }

啟動項目,斷點打在這里,可以看到 Map 里面存的 key 是 Bean 名稱,value 是具體實現(xiàn)類

所以基礎(chǔ)用法的代碼,可以修改如下:

    @Autowired
    private Map<String, WriteService> writeServiceMap;
    public String test(String type, String content) {
        return writeServiceMap.get(type).write(content);
    }

這種寫法是不是更簡潔、優(yōu)雅

總結(jié)

本文介紹了Spring Boot 自動裝配的幾種用法。

到此這篇關(guān)于Spring Boot 自動裝配的幾種用法示例小結(jié)的文章就介紹到這了,更多相關(guān)springboot自動裝配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java接口操作(繼承父類并實現(xiàn)多個接口)

    Java接口操作(繼承父類并實現(xiàn)多個接口)

    這篇文章主要介紹了Java接口操作(繼承父類并實現(xiàn)多個接口),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 基于Java代碼操作Redis過程詳解

    基于Java代碼操作Redis過程詳解

    這篇文章主要介紹了基于Java代碼操作Redis過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java中的abstract和interface

    Java中的abstract和interface

    abstract和interface關(guān)鍵字在Java中隨處可見,它是Java三大特性封裝、繼承、多態(tài)特性的實現(xiàn)重要支柱之一。interface關(guān)鍵字用于定義接口抽象,其本質(zhì)上是用于定義類型、定義類所具有的能力,下面來看看詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • springboot各種下載文件的方式匯總

    springboot各種下載文件的方式匯總

    下載功能其實就是用戶輸入指定文件路徑信息,然后把文件返回給用戶,下面這篇文章主要給大家介紹了關(guān)于springboot各種下載文件的方式,需要的朋友可以參考下
    2022-10-10
  • java計算兩個日期之間相差天數(shù)的4種方法詳解

    java計算兩個日期之間相差天數(shù)的4種方法詳解

    這篇文章主要給大家介紹了關(guān)于java計算兩個日期之間相差天數(shù)的4種方法,本文簡短地介紹java中多種方式求兩個日期的差量,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • Java全面深入探究SpringBoot攔截器與文件上傳

    Java全面深入探究SpringBoot攔截器與文件上傳

    攔截器對使用SpringMvc、Struts的開發(fā)人員來說特別熟悉,因為你只要想去做好一個項目必然會用到它,文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現(xiàn)對應的功能
    2022-05-05
  • Java打成各種壓縮包的方法詳細匯總

    Java打成各種壓縮包的方法詳細匯總

    在工作過程中,需要將一個文件夾生成壓縮文件,然后提供給用戶下載,下面這篇文章主要給大家介紹了關(guān)于Java打成各種壓縮包的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • java?List集合去除null的4種方法

    java?List集合去除null的4種方法

    這篇文章主要給大家介紹了java?List集合去除null的3種方法,文中通過代碼示例將每種方法都介紹的非常詳細,對大家學習或者使用Java具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java模擬UDP通信示例代碼

    Java模擬UDP通信示例代碼

    這篇文章主要介紹了Java模擬UDP通信,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • Java?API文檔的使用方法詳解

    Java?API文檔的使用方法詳解

    在開發(fā)過程中如果遇到疑難問題,除了可以在網(wǎng)絡中尋找答案,也可以在Java API幫助文檔(簡稱"JDK文檔"”)中查找答案,下面這篇文章主要給大家介紹了關(guān)于Java?API文檔使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論

高尔夫| 玉树县| 潍坊市| 白城市| 洛宁县| 江永县| 富源县| 渝北区| 开平市| 通城县| 五大连池市| 阿鲁科尔沁旗| 砚山县| 蒲城县| 贺州市| 苍山县| 宁波市| 疏勒县| 扶绥县| 遂平县| 宁晋县| 同德县| 萍乡市| 板桥市| 秭归县| 东丽区| 富民县| 平湖市| 庆阳市| 周宁县| 神木县| 茂名市| 旅游| 修文县| 嘉荫县| 晴隆县| 盘山县| 那坡县| 渭源县| 苏尼特左旗| 手游|