SpringBoot导入的目的,然后排除模式?

Vin*_*mes 0 java spring-boot

我是一个相对较新的Java,作为一个JS开发人员,在SpringBoot应用程序上工作,我看到了一个让我的好奇心高峰的模式:

在其中Application.java有几个import类,然后exclude在其中标记@SpringBootApplication,例如

import org.springframework.boot.autoconfigure.data.database.DataBaseAutoConfiguration;
...
@SpringBootApplication(
    exclude = {DataBaseAutoConfiguration.class, ...}
)
Run Code Online (Sandbox Code Playgroud)

DataBaseAutoConfiguration 除了这里,代码库中没有其他任何地方引用.

有人可以解释这种模式的目的吗?import这个类感到奇怪,然后立即exclude在配置中

为什么不喜欢这样的:

exclude = {"DataBaseAutoConfiguration", ...} 然后在Spring中查找要忽略的类,避免明显的"无用"导入?

要么:

// import nothing
@SpringBootApplication
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 5

tl; dr import是一种Java语言特性,exclude是一种Spring Boot功能.

您必须在import类中引用它们.在exclude这种情况下是特定于春引导和简单地指示Spring上下文来不会触发任何配置豆内DataBaseAutoConfiguration.从技术上讲,exclude@SpringBootApplication注释中的一个字段.

只需要导入,以便您可以DataBaseAutoConfiguration在代码中引用.如果没有导入,您将收到编译错误.

  • 如果您删除 `exclude = {DataBaseAutoConfiguration.class, ...}` 那么是的,您不需要导入语句。但这也意味着您的应用程序将从`DataBaseAutoConfiguration` 加载所有配置/bean,这对于该特定应用程序来说可能并不理想(即,如果您有自己的自定义数据库配置类来处理数据源的创建等)。 (2认同)
  • 换句话说:您需要导入只是为了编译器和 JVM 能够找到要在您的代码中使用的 `DataBaseAutoConfiguration` 类的定义。如果编译器和 JVM 甚至不知道如何加载它,您就不能告诉 Spring Boot 排除该类。 (2认同)
  • 正确:大概`DataBaseAutoConfiguration` 被标记为`@Configuration` 所以没有排除,Spring 会扫描它并从中加载任何bean 和配置。 (2认同)