<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring中@Primary注解的作用及小demo演示

      一、@Primary注解的核心作用

      @Primary是Spring框架中用于解決依賴注入歧義問題的注解,當容器中存在多個相同類型的Bean時,Spring無法自動決定注入哪一個,此時通過@Primary標記某個Bean為“首選”,注入時會優(yōu)先選擇該Bean。其核心價值在于簡化默認Bean的選擇邏輯,避免在每個注入點都使用@Qualifier顯式指定。

      二、@Primary的典型使用場景

      1. 多實現(xiàn)類沖突:一個接口有多個實現(xiàn)類(如UserServiceUserServiceImplAUserServiceImplB),希望默認注入其中一個;

      2. 多數(shù)據(jù)源配置:項目中需要連接多個數(shù)據(jù)庫(如MySQL和PostgreSQL),設置其中一個為默認數(shù)據(jù)源;

      3. 第三方庫集成:避免第三方庫的Bean與自定義Bean沖突,通過@Primary指定優(yōu)先使用的實現(xiàn)。

      三、小demo演示(接口多實現(xiàn)場景)

      1. 定義接口與實現(xiàn)類

      假設我們有一個MessageService接口,用于發(fā)送消息,有兩個實現(xiàn)類:EmailMessageService(發(fā)送郵件)和SmsMessageService(發(fā)送短信)。

      // 接口定義
      public interface MessageService {
          void sendMessage(String content);
      }
      
      // 郵件服務實現(xiàn)(默認首選)
      @Component
      @Primary
      public class EmailMessageService implements MessageService {
          @Override
          public void sendMessage(String content) {
              System.out.println("【郵件】發(fā)送消息:" + content);
          }
      }
      
      // 短信服務實現(xiàn)
      @Component
      public class SmsMessageService implements MessageService {
          @Override
          public void sendMessage(String content) {
              System.out.println("【短信】發(fā)送消息:" + content);
          }
      }
      

      2. 注入并使用接口

      創(chuàng)建一個MessageController,通過構(gòu)造器注入MessageService,無需指定具體實現(xiàn):

      @Component
      public class MessageController {
          private final MessageService messageService;
      
          @Autowired
          public MessageController(MessageService messageService) {
              this.messageService = messageService;
          }
      
          public void send() {
              messageService.sendMessage("Hello, Spring @Primary!");
          }
      }
      

      3. 運行結(jié)果

      啟動Spring應用(如通過AnnotationConfigApplicationContext加載配置),調(diào)用MessageController.send()方法,輸出結(jié)果為:

      【郵件】發(fā)送消息:Hello, Spring @Primary!
      

      原因EmailMessageService被標記為@Primary,Spring在注入MessageService時優(yōu)先選擇了它。若移除@Primary注解,Spring會拋出NoUniqueBeanDefinitionException(多個相同類型Bean無法確定注入哪一個)。

      四、關(guān)鍵說明

      • 與@Qualifier的區(qū)別@Primary全局默認選擇(適用于所有注入點),而@Qualifier局部顯式指定(需在注入時明確指定Bean名稱,如@Qualifier("smsMessageService"));

      • 配置類中使用:若Bean通過@Bean方法手動創(chuàng)建,同樣可以在方法上添加@Primary(如@Bean @Primary public MessageService emailMessageService())。

      通過這個小demo,可以清晰看到@Primary如何解決多Bean注入的歧義問題,簡化默認Bean的選擇流程。

      posted on 2025-09-23 14:38  ~碼鈴薯~  閱讀(38)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产999精品2卡3卡4卡| 中文字幕av无码一区二区蜜芽三区 | 国产欧美丝袜在线二区| 国产suv精品一区二区| 国精品午夜福利不卡视频| 亚洲熟妇自偷自拍另类| 亚洲欧美日韩久久一区二区| 噜噜久久噜噜久久鬼88| 内射一区二区三区四区| 色伦专区97中文字幕| 精品91在线| 最新亚洲春色av无码专区| 国产极品粉嫩学生一线天| 成人拍拍拍无遮挡免费视频| 亚洲中文字幕日韩精品| 国产不卡av一区二区| 国产精品多p对白交换绿帽| 免费无码又爽又刺激网站| 忘忧草www日本韩国| 免费午夜无码片在线观看影院| 国产无遮挡裸体免费久久| 成人性生交片无码免费看| 天堂中文8资源在线8| 欧美熟妇乱子伦XX视频| 欧美成人看片黄A免费看| 欧美国产精品啪啪| 精品人妻伦一二三区久久aaa片| 国产久久热这里只有精品| 婷婷丁香五月深爱憿情网| 欧美熟妇xxxxx欧美老妇不卡| 亚洲av成人一区在线| 秋霞人妻无码中文字幕| 国产精品久久久国产盗摄| 亚洲岛国成人免费av| 日本欧美一区二区免费视频 | 亚洲综合欧美在线…| 人妻少妇精品视频专区| 通许县| 国产日韩精品欧美一区灰 | 亚洲中文字幕一二区日韩| 国产黄大片在线观看画质优化|