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

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: 【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 Maven
深入理解Spring Boot Starter:概念、特点、场景、原理及自定义starter
深入理解Spring Boot Starter:概念、特点、场景、原理及自定义starter
10 1
|
6天前
|
前端开发 Java 数据库连接
Spring的工作原理(一)简介
Spring的工作原理(一)简介
8 1
|
21小时前
|
监控 NoSQL Java
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
【面试高频 time:】SpringBoot整合Redisson实现分布式锁
7 0
|
1天前
|
缓存 Java 微服务
Spring Cloud中@RefreshScope实现动态刷新的原理
Spring Cloud中@RefreshScope实现动态刷新的原理
5 0
|
2天前
|
Java 应用服务中间件 Spring
SpringBoot条件注解原理
可以看到isPresent的逻辑是通过FilteringSpringBootCondition.resolve(className, classLoader); 来尝试加载该类,如果能正常加载,则代表该类存在,如果不能则代表该类不存在。
10 0
|
6天前
|
XML Java 数据格式
Spring的工作原理(二)IOC-DI
Spring的工作原理(二)IOC-DI
12 0
|
6天前
|
Java 测试技术 数据安全/隐私保护
微信授权就是这个原理,Spring Cloud OAuth2 授权码模式
微信授权就是这个原理,Spring Cloud OAuth2 授权码模式
|
6天前
|
存储 安全 Java
spring security原理-学习笔记1-整体概览
spring security原理-学习笔记1-整体概览
|
7天前
|
设计模式 SQL JavaScript
java面试宝典全套含答案
java面试宝典全套含答案
|
7天前
|
存储 Java
java面试题大全带答案_面试题库_java面试宝典2018
java面试题大全带答案_面试题库_java面试宝典2018