16.1逐步更换自动配置
自动配置是非侵入性的。在任何时候,您都可以开始定义自己的配置以替换自动配置的特定部分。例如,如果添加自己的 DataSource bean,
则默认的嵌入式数据库支持会退回。
如果您需要了解当前正在应用的自动配置以及原因,请使用 --debug 开关启动您的应用程序。这样做可以为选择的核心记录器启用调试日志,并
将条件报告记录到控制台。
16.2禁用特定的自动配置类
如果发现正在应用您不需要的特定自动配置类,则可以使用 @EnableAutoConfiguration 的exclude属性禁用它们,如以下示例所示:
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
如果类不在类路径上,则可以使用注释的 excludeName 属性并指定完全限定名称。最后,您还可以使用 spring.autoconfigure.exclude 属
性控制要排除的自动配置类列表。
您可以在注释级别和使用属性定义排除项。
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;
}
// ...
}
如果bean有一个构造函数,则可以省略 @Autowired ,如以下示例所示:
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
请注意使用构造函数注入如何将 riskAssessor 字段标记为 final ,表示无法随后更改它