当前位置: 首页 > news >正文

springboot面试题

SpringBoot注解

@SpringBootApplication

@EnableAutoConfiguration

springboot自动配置原理

@SpringBootApplication 是一个复合注解,结合了以下三个核心注解的功能,用于简化 Spring Boot 应用的启动类配置:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

通常作为主类注解使用,标记 Spring Boot 应用的入口。

@SpringBootConfiguration

表明当前类是一个 Spring Boot 的配置类,继承自 @Configuration 注解。用于定义 Bean 的配置方法,替代传统 XML 配置方式。

@EnableAutoConfiguration

启用 Spring Boot 的自动配置机制。根据项目依赖(如 JPA、Redis 等)自动配置 Spring 应用的上下文,减少手动配置。

@ComponentScan

自动扫描指定包及其子包下的组件(如 @Component@Service@Repository@Controller 等),并将它们注册为 Spring Bean。默认扫描当前类所在包。

Spring Boot 自动配置原理超简版解释

想象 Spring Boot 自动配置就像一个智能家电安装师傅,它会根据你家里的电器(项目中的依赖)自动帮你接线(配置),你只需要按下开关(主类上的 @SpringBootApplication)就能用了。具体来说:

极简版工作流程

  1. ​检查工具箱​​(扫描classpath):

    • 师傅先看你家有哪些电器(检查pom.xml中的依赖)
    • 比如发现你有 spring-boot-starter-data-jpa → 知道你要用数据库
  2. ​查说明书​​(spring.factories):

    • 师傅包里有个万能说明书(META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    • 找到对应电器的安装指南(如 JpaAutoConfiguration
  3. ​看你的要求​​(条件装配):

    • 用各种@Conditional检查:

    @ConditionalOnClass(DataSource.class) // 你家有水管才装热水器 @ConditionalOnMissingBean(DataSource.class) // 你自己没带水管才用我的

  4. ​自动接线​​(创建Bean):

    • 如果所有条件满足,就自动把线接好(创建并配置好DataSource、EntityManager等)
  5. ​给你遥控器​​(属性配置):

    • 你可以通过application.yml调整参数:

    spring: datasource: url: jdbc:mysql://localhost:3306/mydb

关键比喻

技术概念生活比喻
@EnableAutoConfiguration告诉师傅"开始自动安装吧"
AutoConfiguration各种电器的安装说明书
@Conditional师傅的智能判断规则
starter已经打包好的电器套装

记住三个最核心的:

  1. ​约定大于配置​​:只要你按标准带依赖(starter),它就按默认最佳实践配好
  2. ​随时可覆盖​​:所有自动配置你都能自己重新定义(用@Bean
  3. ​透明可追溯​​:启动时加 --debug 参数能看到所有自动配置报告

下次看到自动配置,就想象是这个师傅在问:"你要用数据库吗?→ 有相关类吗?→ 没自己配过吧?→ 那我给你配个最常用的咯!"

http://www.xdnf.cn/news/714619.html

相关文章:

  • meilisearch docker 简单安装
  • 基于Docker和YARN的大数据环境部署实践最新版
  • kafka 常用知识点
  • 4. Qt对话框(2)
  • [网页五子棋][匹配模块]用户管理器可能存在的问题以及解决办法(线程安全、多开问题)
  • Leetcode 2921. 价格递增的最大利润三元组 II
  • 知识课堂|sCMOS相机可编程快门模式解析
  • 2.2 在javaweb开发中常见后缀文件名的简单理解
  • 9.4 Q1|复旦大学CHARLS发文 | 老年人肌肉减少症和轻度认知障碍
  • Java 实现下载指定minio目录下的所有内容到本机
  • 深入解析注解框架实现原理:从源码到实战
  • 【下拉选项数据管理优化实践:从硬编码到高扩展性架构】
  • Jetson nx下realsense相机系统重启后找不到相机,需要重新插拔usb口问题解决办法
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.5 R语言解题
  • 云渲染农场行业需求,如何搭建,有什么用途?
  • CDN安全加速:HTTPS加密最佳配置方案
  • C# Costura.Fody 排除多个指定dll
  • T5和GPT哪个更强大
  • C语言的函数调用,允许参数缺省和乱序
  • 通配符(Wildcard)与正则表达式(Regular Expression)的关系及区别
  • Python中re模块结合正则表达式的应用
  • 企业文件乱、传输慢?用群晖 NAS 构建安全高效的共享系统
  • Codejock ToolkitPro 与 BCGControlBar Pro 深度对比
  • 太阳系运行模拟程序-html动画
  • 宝塔安装WordPress程序
  • Rust入门之并发编程基础(一)
  • 【无标题】C++23新特性:支持打印volatile指针
  • 字节开源BAGEL可文生图、图像理解、图像编辑
  • 秒杀/高并发解决方案+落地实现
  • 【Pandas】pandas DataFrame duplicated