【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识(上)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识

🐳 Spring Boot自动装配原理详解与常见面试题

1. 前言

   Spring Boot作为一个高度简化的Spring框架,通过自动装配机制帮助开发者更轻松地构建和部署Spring应用程序。本篇博客将深入探讨Spring Boot自动装配原理,并通过常见的面试题来加深对该原理的理解。让我们一起来学习和掌握这些知识!


2. Spring Boot自动装配原理

2.1 条件化配置

💧Spring Boot的自动装配原理依赖于条件化配置。条件化配置是通过条件注解实现的,这些注解允许根据应用程序的上下文条件来装配bean。

2.1.1 @ConditionalOnClass

💧注解@ConditionalOnClass用于指定当类路径中存在指定的类时,条件成立,允许装配相应的bean。

💧示例:假设我们有一个RedisService类,它依赖于Jedis客户端库。我们可以使用@ConditionalOnClass来自动配置RedisService

@Configuration
@ConditionalOnClass(Jedis.class)
public class RedisAutoConfiguration {
    @Bean
    public RedisService redisService() {
        return new RedisService();
    }
}

💧在这个例子中,当类路径中存在Jedis类时,RedisAutoConfiguration将被触发,自动配置RedisService

2.1.2 @ConditionalOnBean

💧注解@ConditionalOnBean用于指定当容器中存在指定的bean时,条件成立,允许装配相应的bean。

💧示例:假设我们有一个MongoDBService类,它依赖于MongoClient bean。我们可以使用@ConditionalOnBean来自动配置MongoDBService

@Configuration
@ConditionalOnBean(MongoClient.class)
public class MongoAutoConfiguration {
    @Bean
    public MongoDBService mongoDBService() {
        return new MongoDBService();
    }
}

💧↑ 当容器中存在MongoClient bean时,MongoAutoConfiguration将被触发,自动配置MongoDBService

2.2 组件扫描

💧Spring Boot利用组件扫描机制自动发现带有特定注解的类,并将它们注册为Spring容器中的bean。

2.2.1 示例:自动注册组件

💧假设我们有一个UserService类,带有@Service注解:

@Service
public class UserService {
    // ...
}

💧在主启动类上加上@SpringBootApplication注解,它将默认扫描主启动类所在包及其子包下的组件:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

💧UserService将会被自动扫描并注册为Spring容器中的bean。

2.3 自动配置类

💧Spring Boot的自动配置类是普通的Java配置类,使用条件化配置注解来实现自动装配。

2.3.1 示例:自动配置数据源

💧Spring Boot提供了DataSourceAutoConfiguration类用于自动配置数据源。它使用@ConditionalOnClass注解来判断是否存在DataSource类,然后根据配置文件中的属性来自动配置数据源。

@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
}

💧↑ 当类路径中存在DataSource类时,DataSourceAutoConfiguration将被触发,并自动配置数据源。

【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识(下);https://developer.aliyun.com/article/1390118

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
1月前
|
Java
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
14天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
160 37
|
4天前
|
Java 应用服务中间件 API
Vertx高并发理论原理以及对比SpringBoot
Vertx 是一个基于 Netty 的响应式工具包,不同于传统框架如 Spring,它的侵入性较小,甚至可在 Spring Boot 中使用。响应式编程(Reactive Programming)基于事件模式,通过事件流触发任务执行,其核心在于事件流 Stream。相比多线程异步,响应式编程能以更少线程完成更多任务,减少内存消耗与上下文切换开销,提高 CPU 利用率。Vertx 适用于高并发系统,如 IM 系统、高性能中间件及需要较少服务器支持大规模 WEB 应用的场景。随着 JDK 21 引入协程,未来 Tomcat 也将优化支持更高并发,降低响应式框架的必要性。
Vertx高并发理论原理以及对比SpringBoot
|
14天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2天前
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
12 3
|
15天前
|
Java 开发者 数据格式
【Java笔记+踩坑】SpringBoot基础4——原理篇
bean的8种加载方式,自动配置原理、自定义starter开发、SpringBoot程序启动流程解析
【Java笔记+踩坑】SpringBoot基础4——原理篇
|
1月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住
|
1月前
|
XML Java 数据格式
Spring5入门到实战------2、IOC容器底层原理
这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
Spring5入门到实战------2、IOC容器底层原理
|
1月前
|
Java 程序员 数据库连接
女朋友不懂Spring事务原理,今天给她讲清楚了!
该文章讲述了如何解释Spring事务管理的基本原理,特别是针对女朋友在面试中遇到的问题。文章首先通过一个简单的例子引入了传统事务处理的方式,然后详细讨论了Spring事务管理的实现机制。
女朋友不懂Spring事务原理,今天给她讲清楚了!