三、Spring註解之@Import

来源:https://www.cnblogs.com/lee0527/archive/2019/10/24/11735485.html
-Advertisement-
Play Games

spring註解之@Import 【1】@Import ​ 參數value接收一個Class數組,將你傳入的類以全類名作為id加入IOC容器中 ​ 比較簡單,此處不做詳細解釋 【2】ImportSelector ​ ImportSelector強調的是復用性,使用它需要創建一個類實現ImportSe ...


spring註解之@Import

【1】@Import

​ 參數value接收一個Class數組,將你傳入的類以全類名作為id加入IOC容器中

​ 比較簡單,此處不做詳細解釋

【2】ImportSelector

​ ImportSelector強調的是復用性,使用它需要創建一個類實現ImportSelector介面,實現方法的返回值是字元串數組,也就是需要註入容器中的組件的全類名。id同樣也是全類名。

​ 上代碼:

//自定義邏輯返回需要導入的組件
public class MyImportSelector implements ImportSelector {
    // 返回值就是導入到容器中的組件全類名
    // AnnotationMetadata:當前標註@Import註解的類的所有註解信息
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[] { "test.spring.ZhangSan", "test.spring.LiSi", "test.spring.WangWu" };
    }
}

【3】ImportBeanDefinitionRegistrar

​ spring官方就是用這種方式,實現了@Component、@Service等註解的動態註入機制。定義一個ImportBeanDefinitionRegistrar的實現類,然後在有@Configuration註解的配置類上使用@Import導入

​ 具體使用:創建一個ImportBeanDefinitionRegistrar的實現類,實現registerBeanDefinitions方法,對組件進行註入。

public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /**
     * @param annotationMetadata 當前標註@Import註解的類的所有註解信息
     * @param beanDefinitionRegistry BeanDefinition的註冊類
     */
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        RootBeanDefinition beanDefinition = new RootBeanDefinition(Cat.class);
        beanDefinitionRegistry.registerBeanDefinition("cat",beanDefinition);
    }
}

​ 配置類MyConfig:

@Configuration
@Import(value = {MyBeanDefinitionRegistrar.class})
public class MyConfig {
}

/**測試結果
beanName: org.springframework.context.annotation.internalConfigurationAnnotationProcessor
beanName: org.springframework.context.annotation.internalAutowiredAnnotationProcessor
beanName: org.springframework.context.annotation.internalCommonAnnotationProcessor
beanName: org.springframework.context.event.internalEventListenerProcessor
beanName: org.springframework.context.event.internalEventListenerFactory
beanName: myConfig
beanName: cat
*/

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 運行springboot項目報錯: *************************** APPLICATION FAILED TO START *************************** Description: Field userMapper in com.whohim.spri ...
  • 2019-10-24-23:21:17 目錄 1.抽象的方法 2.抽象類 3.抽象類和抽象方法的使用 4.抽象類的註意事項 5.案例代碼 1.抽象的方法 What:如果父類當中的方法不確定如何進行{}方法體實現,那麼這就是一個抽象方法。 抽象方法:就是加上abstract關鍵字,然後去掉大括弧,直接 ...
  • 1 #是將傳入的值當做字元串的形式,eg:select id,name,age from student where id =#{id},當前端把id值1,傳入到後臺的時候,就相當於 select id,name,age from student where id ='1'. 2 $是將傳入的數據直 ...
  • 平時我們在做項目時經常需要對一些重要功能操作記錄日誌,方便以後跟蹤是誰在操作此功能;我們在操作某些功能時也有可能會發生異常,但是每次發生異常要定位原因我們都要到伺服器去查詢日誌才能找到,而且也不能對發生的異常進行統計,從而改進我們的項目,要是能做個功能專門來記錄操作日誌和異常日誌那就好了, 當然我們 ...
  • springsecurity舊版本自定義設置用戶密碼角色 protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("ad ...
  • redis相信大家都很熟悉了,和memcached一樣是一個高性能的key-value資料庫,至於什麼是緩存伺服器,度娘都有很明白的介紹了,我在這裡就不一一介紹了。 那我們一般什麼情況下才會使用緩存伺服器呢?可不是什麼情況都需要的哦,一般來說是在需要頻繁對一個欄位讀取的時候才會需要將這個欄位放入到緩 ...
  • 不管你是做數據分析,還是網路爬蟲,Web 開發、亦或是機器學習,你都離不開要和資料庫打交道,而 MySQL 又是最流行的一種資料庫,這篇文章介紹 Python 操作 MySQL 的5種方式,你可以在實際開發過程中根據實際情況合理選擇。 1、MySQLdb MySQLdb又叫MySQL-python ...
  • 一、模板類型錯誤: 錯誤原因:在models中漏掉了return: 【這裡】加上return即可。 二、url相關錯誤 靜態文件無法訪問,如樣式出不來 css樣式總出不來,折騰了一個多小時,原來,urlpatterns 寫成這樣: 我把 [登錄註冊] url後面也寫成 = 而並非+= ,這就造成了u ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...