Spring Boot – 配置/自动配置



本章将详细讨论 Spring Boot 配置和自动配置。

Spring Boot 配置

尽管 Spring/Spring Boot 应用可以使用 XML 文档进行配置,但通常建议使用带有 @Configuration 注解的单个文件来配置 Spring Boot 应用。

不同类型的注解

@Component 注解

在 Spring Boot 中,@Component 注解声明一个类为 Spring 组件。这向 Spring 信号表明该类应由 Spring 容器管理,这意味着它将被自动创建、初始化,并可能被注入到其他组件中。

示例

import org.springframework.stereotype.Component;

@Component
public class Utility {
...
}

@Configuration 注解

在 Spring Boot 中,@Configuration 注解用于指示一个类是 Bean 定义的来源。它是 Spring 框架中的核心注解,并非 Spring Boot 特有的。标有 @Configuration 的类可以使用类中方法上的 @Bean 注解来定义 Bean。然后,这些 Bean 由 Spring 容器管理。@Configuration 推广基于 Java 的配置方法,而不是仅仅依赖 XML 配置文件。

示例

@Configuration
public class AppConfig {

   @Bean
   public MyService myService() {
      return new MyServiceImpl();
   }
}

@SpringBootApplication 注解

这是一个元注解,它组合了 @EnableAutoConfiguration@ComponentScan@Configuration。它通常是引导 Spring Boot 应用所需的唯一注解。

示例

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

@ComponentScan 注解

在 Spring Boot 中,@ComponentScan 注解用于指示 Spring 扫描指定的包及其子包中的组件(用 @Component@Service@Repository@Controller 等注解的类)并将它们注册为 Spring 应用上下文中的 Bean。默认情况下,如果您没有显式使用 @ComponentScan,Spring Boot 会自动扫描您的主应用程序类所在的包及其子包。如果您的组件位于不同的包结构中,您可以使用 @ComponentScan 的 basePackages 属性来指定要扫描的包。您可以使用 basePackages 中的数组指定多个包,例如:

basePackages = {"com.example.package1", "com.example.package2"}

示例

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.mypackage"}) 
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

什么是 Spring Boot 自动配置?

Spring Boot 自动配置是一项功能,它可以根据类路径上存在的依赖项和各种属性设置来自动配置您的 Spring 应用程序。这消除了许多手动配置的需要,使 Spring Boot 应用程序更容易设置和维护。

@SpringBootApplication 或 @EnableAutoConfiguration 注解

这些注解触发自动配置过程。通常,您使用 @SpringBootApplication 注解您的主应用程序类,其中包含 @EnableAutoConfiguration。可以使用 @AutoConfigurationPackage 注解配置其他包。

  • 扫描类路径 - Spring Boot 扫描类路径以查找库和框架。

  • 条件配置 - 基于检测到的依赖项,Spring Boot 应用相关的配置。这是使用 @Conditional 注解完成的,例如:

    • @ConditionalOnClass - 如果类路径上存在特定类,则应用配置。

    • @ConditionalOnMissingBean - 如果尚未定义特定 Bean,则应用配置。

    • @ConditionalOnProperty - 基于属性值应用配置。

  • Bean 创建和配置 - Spring Boot 基于应用的自动配置创建和配置 Bean。

    示例

    • 如果您将 spring-boot-starter-web 依赖项添加到您的项目中,Spring Boot 会自动配置 Tomcat web 服务器以及 web 应用程序所需的其它组件。

    • 如果您添加了 spring-boot-starter-data-jpa 依赖项,Spring Boot 会自动配置数据源、实体管理器以及基于 JPA 的数据访问所需的其它组件。

Spring Boot 自动配置的优势

以下是使用 Spring Boot 自动配置的一些主要优势。

  • 减少样板代码 - 自动配置消除了手动配置常用 Spring 组件的需要。

  • 加快开发速度 - 您可以快速创建 Spring Boot 应用程序,而无需编写大量的配置代码。

  • 提高生产力 - 自动配置允许您专注于应用程序的核心业务逻辑。

  • 自定义 - 您可以通过以下方式自定义自动配置行为

    • 使用 @EnableAutoConfigurationexclude 属性排除特定的自动配置类。

    • 定义您自己的 Bean 来覆盖自动配置的 Bean。

    • 使用属性文件或环境变量来修改默认配置。

广告