SpringBoot--自动配置的替换和关闭

SpringBoot启用自动配置需要使用@EnableAutoConfiguration注解,整个应用只需一个该注解,因此,只要将该注解加到主配置类即可。

由于 @SpringBootApplication是由@EnableAutoConfiguration、@ComponentScan、@Configuration这三个组合的,因此,只要项目中使用了@SpringBootApplication,也自然使用了@EnableAutoConfiguration,从而启用了自动配置。

自动配置的替换

SpringBoot自动配置通常有一个原则:当容器中不存在特定类型的Bean时,SpringBoot才会配置该类型的bean。例如引入spring-boot-starter-jdbc依赖,SpringBoot会尝试在容器中自动配置一个DataSource bean,但如果显示的在容器中配置了一个DataSource bean,那么SpringBoot就不会去自动配置了。

SpringBoot提供一个@ConditionalOnMissingBean注解,该注解通常和@Bean同时使用,这表示只有当某个bean不存在时,才会创建@Bean修饰的Bean,

比如以下代码:

java 复制代码
// 如果容器中没有DataSource类型的Bean,则创建一个DriverDataSource作为默认数据源
@ConditionalOnMissingBean({DataSource.class})
@Bean
public DataSource dataSource(){
   return new DriverDataSource();
}

// 如果容器中不存在名为dataSource的Bean,则创建一个DriverDataSource作为默认数据源
@ConditionalOnMissingBean(name = "dataSource")
@Bean
public DataSource dataSource(){
   return new DriverDataSource();
}

禁用特定的自动配置

要禁用特定的自动配置类,可通过@EnableAutoConfiguration注解的如下属性来指定:

  1. exclude:值可以是一个Class数组,用于禁用一个或多个自动配置类
  2. excludeName:指定一个或多个自动配置类的完整类名的字符串

实际使用中,@SpringBootApplication已包含了@EnableAutoConfiguration,@SpringBootApplication注解的exclude、excludeName两个属性就是@EnableAutoConfiguration注解的这两个属性的别名。

比如禁用DataSourceAutoConfiguration的自动配置类

java 复制代码
// 禁用Spring Boot的自动数据源配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class App
{
   public static void main(String[] args)
   {
      // 创建Spring容器、运行Spring Boot应用
      SpringApplication.run(App.class, args);
   }
}

在application.properties中通过spring.autoconfigure.exclude来指定要禁用的配置类,比如禁用DataSourceAutoConfiguration和ActiveMQAutoConfiguration:

java 复制代码
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration
相关推荐
四谎真好看9 分钟前
Java 学习笔记(进阶篇2)
java·笔记·学习
上官浩仁23 分钟前
springboot ioc 控制反转入门与实战
java·spring boot·spring
deepwater_zone24 分钟前
Spring 微服务
spring·微服务
叫我阿柒啊1 小时前
从Java全栈到前端框架:一位程序员的实战之路
java·spring boot·微服务·消息队列·vue3·前端开发·后端开发
mqiqe1 小时前
架构-亿级流量性能调优实践
java·架构
野犬寒鸦2 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
七夜zippoe2 小时前
AI+Java 守护你的钱袋子!金融领域的智能风控与极速交易
java·人工智能·金融
岁忧2 小时前
(LeetCode 面试经典 150 题) 200. 岛屿数量(深度优先搜索dfs || 广度优先搜索bfs)
java·c++·leetcode·面试·go·深度优先
liliangcsdn3 小时前
结合prompt分析NodeRAG的build过程
java·服务器·人工智能·数据分析·知识图谱
黑色的山岗在沉睡3 小时前
LeetCode 189. 轮转数组
java·算法·leetcode