SpringBoot自动配置@EnableAutoConfiguration、@Import、@Condition

本文详细介绍了SpringBoot自动配置的机制,包括@Conditional条件判断如何选择性创建Bean,启用内置web服务器的原理,@Enable*注解的底层实现@Import,以及核心注解@EnableAutoConfiguration的工作方式。内容涵盖了各种条件注解的使用,如@ConditionalOnClass、@ConditionalOnBean等,以及自动配置类的加载流程。

一.SpringBoot自动配置在这里插入图片描述

(1)Condition条件判断

可以实现选择性的创建Bean操作(Condition就是满足你写的条件(如要加某个maven坐标才创建bean)才创建bean的)

方法1:
@Bean
@Conditional(自定义类),要实现Condition接口的matches方法返回true才创建:

在这里插入图片描述

在这里插入图片描述
classcondition就是一个条件类
在这里插入图片描述

方法2:
在这里插入图片描述

用@ConditionOnClass注解(“放你想要的坐标(条件)(字节码文件名)”),(就是满足了这个条件,才会创建这个类下的所有bean,下面就是演示创建user的bean</

Spring Boot自动配置功能实现条件判断依赖的核心注解为条件注解,例如`@ConditionalOnClass`、`@ConditionalOnMissingBean`、`@ConditionalOnProperty`、`@ConditionalOnWebApplication`等。这些注解可判断某些配置是否满足条件,从而决定自动配置类是否生效[^2][^4]。 以下是这些条件注解的具体说明: - `@ConditionalOnClass`:类路径中存在指定类时,当依赖库存在,就会启用配置,例如`@ConditionalOnClass(DataSource.class)`,当`DataSource`类存在时配置生效[^4]。 - `@ConditionalOnMissingBean`:容器中不存在指定类型的Bean时,若用户自定义Bean,就会提供默认实现,例如`@ConditionalOnMissingBean`,当用户自定义`DataSource`时生效[^4]。 - `@ConditionalOnProperty`:配置文件中存在指定属性且值为`true`时,会根据配置开关启用功能,例如`@ConditionalOnProperty("spring.jpa.hibernate.ddl-auto")`,依据该配置项的值决定是否启用功能[^4]。 - `@ConditionalOnWebApplication`:应用为Web环境(Servlet或Reactive)时,仅在Web应用中启用MVC配置等相关功能[^4]。 示例代码如下,展示了`@ConditionalOnClass`和`@ConditionalOnMissingBean`的使用: ```java import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration @ConditionalOnClass(DataSource.class) // 当 DataSource 类存在时生效 public class DataSourceAutoConfiguration { @Bean @ConditionalOnMissingBean // 当用户自定义 DataSource 时生效 public DataSource dataSource() { // 这里可以实现 DataSource 的创建逻辑 return null; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值