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

简介: 【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

相关文章
|
11月前
|
缓存 Java 开发者
【Spring】原理:Bean的作用域与生命周期
本文将围绕 Spring Bean 的作用域与生命周期展开深度剖析,系统梳理作用域的类型与应用场景、生命周期的关键阶段与扩展点,并结合实际案例揭示其底层实现原理,为开发者提供从理论到实践的完整指导。
1130 22
|
11月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
3019 0
|
10月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
10月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
663 4
|
10月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
805 2
|
12月前
|
Java 关系型数据库 数据库
深度剖析【Spring】事务:万字详解,彻底掌握传播机制与事务原理
在Java开发中,Spring框架通过事务管理机制,帮我们轻松实现了这种“承诺”。它不仅封装了底层复杂的事务控制逻辑(比如手动开启、提交、回滚事务),还提供了灵活的配置方式,让开发者能专注于业务逻辑,而不用纠结于事务细节。
1272 1
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
490 4