Spring Boot 常用注解面試題深度解析

🤟致敬讀者

  • 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺

📘博主相關

  • 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息

文章目錄

      • Spring Boot 常用注解面試題深度解析
        • 一、核心啟動注解(必考)
        • 二、Bean 管理與依賴注入
        • 三、Spring MVC 注解
        • 四、配置與屬性綁定
        • 五、高級特性注解
        • 六、事務與測試
        • 七、生產實踐與高頻問題
        • 高頻面試題匯總
      • 總結:Spring Boot 注解學習路徑


📃文章前言

  • 🔷文章均為學習工作中整理的筆記。
  • 🔶如有錯誤請指正,共同學習進步。

Spring Boot 常用注解面試題深度解析

在這里插入圖片描述

以下精選 25+ 高頻注解面試題,涵蓋核心原理、實戰技巧及源碼級分析,助你輕松應對面試挑戰。


一、核心啟動注解(必考)
  1. @SpringBootApplication 的作用是什么?包含哪些關鍵注解?

    • 核心作用:開啟自動配置 + 組件掃描 + 配置類聲明
    • 元注解組成:
      @SpringBootConfiguration  // 聲明為配置類
      @EnableAutoConfiguration  // 啟用自動配置
      @ComponentScan            // 包掃描(默認當前包及其子包)
      
  2. @EnableAutoConfiguration 如何實現自動裝配?

    1. 加載 META-INF/spring.factories 中的配置類
    2. 通過 @Conditional 系列注解按條件裝配 Bean
    3. 核心流程:
      graph LR
      A[啟動類] --> B[@SpringBootApplication]
      B --> C[@EnableAutoConfiguration]
      C --> D[AutoConfigurationImportSelector]
      D --> E[加載spring.factories]
      E --> F[過濾@Conditional條件]
      F --> G[注冊Bean定義]
      

二、Bean 管理與依賴注入
  1. @Component@Bean 的區別?
    對比表

    特性@Component@Bean
    作用目標類聲明方法聲明
    控制權Spring 自動實例化開發者手動創建對象
    適用場景自定義類第三方庫組件
    依賴注入支持 @Autowired需在配置類中使用
  2. @Autowired@Resource 的區別?

    • @Autowired
      • 按類型注入 → byType
      • 支持 @Qualifier 指定名稱
      • 是 Spring 原生注解
    • @Resource
      • 默認按名稱注入 → byName(失敗時回退到 byType)
      • JDK 原生注解(javax.annotation
    // 示例
    @Autowired @Qualifier("mysqlService") 
    private DataService service1;@Resource(name = "oracleService") 
    private DataService service2;
    

三、Spring MVC 注解
  1. @RestController@Controller 的區別?

    • @Controller
      • 需要配合 @ResponseBody 返回 JSON
      • 通常返回視圖名稱
    • @RestController = @Controller + @ResponseBody
      • 所有方法自動 JSON 序列化
    // 傳統寫法
    @Controller
    public class OldController {@ResponseBodypublic User getUser() { /* ... */ }
    }// 現代寫法
    @RestController
    public class NewController {@GetMapping("/user")public User getUser() { /* ... */ } // 自動轉JSON
    }
    
  2. @PathVariable@RequestParam 的應用場景?
    對比

    注解位置示例 URL獲取方式
    @PathVariableURL 路徑/users/{id}id = 123
    @RequestParam查詢字符串/search?keyword=Springkeyword = "Spring"

四、配置與屬性綁定
  1. @Value@ConfigurationProperties 如何選擇?

    • @Value
      • 適合單個屬性注入
      • 支持 SpEL 表達式
      @Value("${server.port}") 
      private int port;
      
    • @ConfigurationProperties
      • 批量綁定屬性到對象
      • 支持類型安全校驗
      @ConfigurationProperties(prefix = "datasource")
      public class DataSourceConfig {private String url;private String username;// getters/setters
      }
      
  2. @PropertySource 加載自定義配置的注意事項?

    • 默認不支持 YAML 文件(需配合 YamlPropertySourceFactory
    • 多文件加載順序決定屬性覆蓋關系
    @Configuration
    @PropertySource(value = "classpath:custom.properties", encoding = "UTF-8")
    public class AppConfig { /* ... */ }
    

五、高級特性注解
  1. @Conditional 系列注解的工作原理?(重點)
    核心條件注解

    注解激活條件
    @ConditionalOnClass類路徑存在指定類
    @ConditionalOnBeanSpring 容器存在指定 Bean
    @ConditionalOnProperty配置屬性匹配條件
    @ConditionalOnWebApplication當前是 Web 應用

    源碼解析

    // 自定義條件
    public class EnvCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {String env = context.getEnvironment().getProperty("app.env");return "prod".equals(env);}
    }// 使用示例
    @Bean
    @Conditional(EnvCondition.class)
    public Service prodService() { /* ... */ }
    
  2. @Async 實現異步調用的線程池配置?
    最佳實踐

    @Configuration
    @EnableAsync
    public class AsyncConfig {@Bean(name = "taskExecutor")public Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.setThreadNamePrefix("Async-");return executor;}
    }// 使用
    @Service
    public class EmailService {@Async("taskExecutor") // 指定線程池public void sendEmail() { /* ... */ }
    }
    

六、事務與測試
  1. @Transactional 在類和方法上的優先級?
    規則

    • 方法注解 > 類注解
    • 接口注解無效(需基于類代理)
    @Service
    @Transactional // 類級別默認事務
    public class UserService {public void updateProfile() { /* 使用類事務 */ }@Transactional(propagation = Propagation.REQUIRES_NEW)public void auditLog() { /* 獨立事務 */ }
    }
    
  2. @SpringBootTest@WebMvcTest 的區別?
    對比

    測試注解測試范圍啟動容器適用場景
    @SpringBootTest完整集成測試服務層/DAO層測試
    @WebMvcTest僅Web MVC層控制器單元測試
    @DataJpaTest僅JPA組件倉庫層測試
    // 控制器測試示例
    @WebMvcTest(UserController.class)
    public class UserControllerTest {@Autowired MockMvc mvc;@MockBean UserService userService;@Testvoid getUserTest() throws Exception {mvc.perform(get("/users/1")).andExpect(status().isOk());}
    }
    

七、生產實踐與高頻問題
  1. 如何自定義 Starter?
    關鍵步驟

    1. 創建 xxx-spring-boot-autoconfigure 模塊
    2. 編寫自動配置類:
      @Configuration
      @ConditionalOnClass(MyService.class)
      @EnableConfigurationProperties(MyProperties.class)
      public class MyAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService(MyProperties props) {return new MyService(props);}
      }
      
    3. META-INF/spring.factories 注冊:
      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.MyAutoConfiguration
      
  2. @ControllerAdvice 的三種用法?

    @ControllerAdvice
    public class GlobalHandler {// 1. 異常處理@ExceptionHandler(NotFoundException.class)public ResponseEntity<Error> handleNotFound(NotFoundException ex) {return ResponseEntity.status(404).body(new Error(ex.getMessage()));}// 2. 數據綁定預處理@InitBinderpublic void initBinder(WebDataBinder binder) {binder.registerCustomEditor(Date.class, new CustomDateEditor(...));}// 3. 模型數據增強@ModelAttributepublic void addCommonModel(Model model) {model.addAttribute("appName", "MyApp");}
    }
    

高頻面試題匯總
  1. @SpringBootApplication 的三個核心注解分別起什么作用?
  2. @Autowired 注入失敗有哪些可能原因?

    答:未掃描包、多個實現類未限定、Bean未創建、靜態字段注入等

  3. 如何讓 @Scheduled 定時任務在集群中只執行一次?

    答:配合 @ConditionalOnProperty 或分布式鎖(如 Redis Lock)

  4. @Transactional 失效的常見場景?

    答:自調用、非 public 方法、異常類型錯誤、數據庫引擎不支持

  5. @RequestParam vs @RequestBody 的區別?

    答:前者處理 URL 參數,后者處理 JSON/XML 請求體


總結:Spring Boot 注解學習路徑

  1. 基礎層
    • 啟動注解:@SpringBootApplication
    • Bean 管理:@Component, @Bean, @Autowired
  2. Web 層
    • REST 控制:@RestController, @GetMapping
    • 參數處理:@PathVariable, @RequestBody
  3. 數據層
    • 數據訪問:@Repository, @Transactional
    • 配置綁定:@ConfigurationProperties
  4. 高級特性
    • 條件裝配:@Conditional 系列
    • 異步處理:@Async, @EnableAsync
  5. 測試與生產
    • 測試切片:@WebMvcTest, @DataJpaTest
    • 全局處理:@ControllerAdvice, @RestControllerAdvice

掌握這些注解的原理和應用場景,不僅能輕松應對面試,更能構建健壯高效的 Spring Boot 應用。


📜文末寄語

  • 🟠關注我,獲取更多內容。
  • 🟡技術動態、實戰教程、問題解決方案等內容持續更新中。
  • 🟢《全棧知識庫》技術交流和分享社區,集結全棧各領域開發者,期待你的加入。
  • 🔵?加入開發者的《專屬社群》,分享交流,技術之路不再孤獨,一起變強。
  • 🟣點擊下方名片獲取更多內容🍭🍭🍭👇

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908474.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

黃曉明新劇《潛淵》定檔 失憶三面間諜開啟諜戰新維度

據悉&#xff0c;黃曉明領銜主演的諜戰劇《潛淵》已于近日正式定檔6月9日&#xff0c;該劇以“失憶三面間諜”梁朔為核心&#xff0c;打破傳統諜戰劇的框架和固有角度&#xff0c;以一種特別的視角將懸疑感推向極致。劇中&#xff0c;梁朔因頭部受傷失去記憶&#xff0c;陷入身…

【自動駕駛避障開發】如何讓障礙物在 RViz 中‘顯形’?呈現感知數據轉 Polygon 全流程

【自動駕駛避障開發】如何讓障礙物在 RViz 中"顯形"?呈現感知數據轉 Polygon 全流程 自動駕駛系統中的障礙物可視化是開發調試過程中至關重要的一環。本文將詳細介紹如何將自動駕駛感知模塊檢測到的障礙物數據轉換為RViz可顯示的Polygon(多邊形)形式,實現障礙物…

#16 學習日志軟件測試

#16 #13布置的任務都沒有wanc 反思一下 一個是貪玩 一個是懶 還有一個原因是學習方式 單看視頻容易困 然后是一個進度寶貝 java ai 編程 完 挑著看的 廖雪峰教程 完 速看 很多過時 javaweb ai筆記 見到13.aop 小林coding 看到4.并發 java guide 還沒開始 若依框架 筆…

在Linux查看電腦的GPU型號

VGA 是指 Video Graphics Array&#xff0c;這是 IBM 于 1987 年推出的一種視頻顯示標準。 lspci | grep vga &#x1f4cc; lspci | grep -i vga 的含義 lspci&#xff1a;列出所有連接到 PCI 總線的設備。 grep -i vga&#xff1a;過濾輸出&#xff0c;僅顯示包含“VGA”字…

daz3d + PBRSkin (MDL)+ SSS

好的&#xff0c;我們來解釋一下 Daz3D 中的 PBRSkin (MDL) Shader。 簡單來說&#xff0c;PBRSkin (MDL) 是 Daz Studio 中一種基于物理渲染&#xff08;PBR&#xff09;技術、專門用于創建高度逼真人物皮膚效果的著色器&#xff08;Shader&#xff09;。 它利用 NVIDIA 的材…

會計 - 合并1- 業務、控制、合并日

一、業務 1.1 業務的定義以及構成要素 業務,是指企業內部某些生產經營活動或資產的組合,該組合一般具有投入、加工處理過程和產出能力,能夠獨立計算其成本費用或所產生的收入。 (1)投入,指原材料、人工、必要的生產技術等無形資產以及構成產出能力的機器設備等其他長期資…

uni-app 項目支持 vue 3.0 詳解及版本升級方案?

uni-app 支持 Vue 3.0 詳解及升級方案 一、uni-app 對 Vue 3.0 的支持現狀 uni-app 從 3.0 版本 開始支持 Vue 3.0&#xff0c;主要變化包括&#xff1a; 核心框架升級&#xff1a; 基于 Vue 3.0 的 Composition API 和 Options API 雙模式支持提供 vueuse/core 等組合式 API…

Java高級 | 【實驗三】Springboot 靜態資源訪問

隸屬文章&#xff1a; Java高級 | &#xff08;二十二&#xff09;Java常用類庫-CSDN博客 系列文章&#xff1a; Java高級 | 【實驗一】Spring Boot安裝及測試 最新-CSDN博客 Java高級 | 【實驗二】Springboot 控制器類相關注解知識-CSDN博客 目錄 一、Thymeleaf 1.1 是什么&…

12、企業應收賬款(AR)全流程解析:從發票開具到回款完成

在商業活動中&#xff0c;現金流如同企業的命脈&#xff0c;而應收管理則是維系這條命脈正常運轉的重要保障。許多企業由于對應收賬款缺乏有效管理&#xff0c;常常面臨資金周轉困難的問題。實踐證明&#xff0c;建立科學的應收管理體系能夠顯著提升資金回籠效率&#xff0c;為…

Python訓練營打卡Day46(2025.6.6)

知識點回顧&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通道注意力&#xff1a;模型的定義和插入的位置通道注意力后的特征圖和熱力圖 i…

ASP.NET MVC添加視圖示例

ASP.NET MVC高效構建Web應用- 商品搜索 - 京東 視圖&#xff08;V&#xff09;是一個動態生成HTML頁面的模板&#xff0c;它負責通過用戶界面展示內容。本節將修改HelloWorldController類&#xff0c;并使用視圖模板文件&#xff0c;以干凈地封裝生成對客戶端的HTML響應的過程…

12.6Swing控件4 JSplitPane JTabbedPane

JSplitPane JSplitPane 是 Java Swing 中用于創建分隔面板的組件&#xff0c;支持兩個可調整大小組件的容器。它允許用戶通過拖動分隔條來調整兩個組件的相對大小&#xff0c;適合用于需要動態調整視圖比例的場景。 常用方法&#xff1a; setLeftComponent(Component comp)&a…

Spark 單機模式部署與啟動

&#x1f680; Spark 單機模式部署與啟動教程&#xff08;適配 Hadoop 3.1.1&#xff09; 本文記錄了在 Linux 環境中部署 Spark 的完整過程&#xff0c;使用 Standalone 單機模式&#xff0c;適配 Hadoop 3.1.1&#xff0c;最終可通過 Web 頁面訪問 Spark Master 狀態界面。 …

JAVA學習 DAY2 java程序運行、注意事項、轉義字符

本系列可作為JAVA學習系列的筆記&#xff0c;文中提到的一些練習的代碼&#xff0c;小編會將代碼復制下來&#xff0c;大家復制下來就可以練習了&#xff0c;方便大家學習。 點贊關注不迷路&#xff01;您的點贊、關注和收藏是對小編最大的支持和鼓勵&#xff01; 系列文章目錄…

Visual Studio 中的 MD、MTD、MDD、MT 選項詳解

在Visual Studio中開發C++項目時,正確選擇運行時庫(runtime library)對于確保應用程序的性能、穩定性和兼容性至關重要。本文將詳細介紹/MD, /MT, /MDd, 和 /MTd這些編譯器選項的意義、應用場景及其區別。 MSVCRT.dll MSVCRT.dll 是 Microsoft Visual C++ Runtime Library …

EasyRTC嵌入式音視頻通信SDK助力物聯網/視頻物聯網音視頻打造全場景應用

一、方案概述? 隨著物聯網技術的飛速發展&#xff0c;視頻物聯網在各行業的應用日益廣泛。實時音視頻通信技術作為視頻物聯網的核心支撐&#xff0c;其性能直接影響著系統的交互體驗和信息傳遞效率。EasyRTC作為一款成熟的音視頻框架&#xff0c;具備低延遲、高畫質、跨平臺等…

棧的概念以及實現

目錄: 一、棧的概念 二、棧的實現 1.棧的初始化 2.棧的銷毀 3.入棧 4.出棧 5.獲取棧頂數據 6.判斷棧是否為空 7.獲取棧的個數 三、代碼 一、棧的概念 棧是一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。 進行數據插入和刪除操作的一端…

【Bluedroid】藍牙啟動之 SMP_Init 源碼解析

藍牙(安全管理協議,Security Management Protocol)是藍牙設備安全通信的核心協議,負責配對、密鑰協商和安全等級管理。本文圍繞 Bluedroid SMP 協議的初始化流程展開,系統解析其核心控制塊(tSMP_CB)的狀態管理、與 L2CAP 層的接口注冊,以及 P-256 橢圓曲線參數的初始化…

C++課設:考勤記錄系統

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 專欄介紹&#xff1a;《編程項目實戰》 目錄 一、項目背景與需求分析1. 傳統考勤管理…

前端面試題之ES6保姆級教程

ES6 核心特性深度解析&#xff1a;現代 JavaScript 開發基石 2015 年發布的 ECMAScript 2015&#xff08;ES6&#xff09;徹底改變了 JavaScript 的編程范式&#xff0c;本文將全面剖析其核心特性及最佳實踐 一、ES6 簡介與背景 ECMAScript 6.0&#xff08;簡稱 ES6&#xff0…