🐳 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