Spring Boot自动配置、Spring Beans和依赖注入

16. 自动配置

Spring Boot自动配置(auto-configuration)尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库。

你可以通过将@EnableAutoConfiguration@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。

:你只需要添加一个@EnableAutoConfiguration注解。我们建议你将它添加到主@Configuration类上。

16.1. 逐步替换自动配置

自动配置是非侵占性的,任何时候你都可以定义自己的配置类来替换自动配置的特定部分。例如,如果你添加自己的DataSource bean,默认的内嵌数据库支持将不被考虑。

如果需要找出当前应用了哪些自动配置及应用的原因,你可以使用--debug开关启动应用。这将会记录一个自动配置的报告并输出到控制台。

16.2. 禁用特定的自动配置

如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableAutoConfiguration(exclude={
    
    DataSourceAutoConfiguration.class})
public class MyConfiguration {
    
    
}

17. Spring Beans和依赖注入

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。简单起见,我们经常使用@ComponentScan注解搜索beans,并结合@Autowired构造器注入。

如果使用上面建议的结构组织代码(将应用类放到根包下),你可以添加@ComponentScan注解而不需要任何参数。你的所有应用程序组件(@Component, @Service, @Repository, @Controller等)将被自动注册为Spring Beans。

下面是一个@Service Bean的示例,它使用构建器注入获取一个需要的RiskAssessor bean。

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {
    
    

    private final RiskAssessor riskAssessor;

    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
    
    
        this.riskAssessor = riskAssessor;
    }

    // ...
}

:注意如何使用构建器注入来允许riskAssessor字段被标记为final,这意味着riskAssessor后续是不能改变的。

猜你喜欢

转载自blog.csdn.net/2301_76484015/article/details/130555400