自动配置
Spring Boot自动配置会尝试根据添加的jar依赖项自动配置Spring应用程序。
您需要通过将@EnableAutoConfiguration
或@SpringBootApplication
注释添加到一个@Configuration
类中来选择自动配置。
禁用特定的自动配置类
如果发现正在应用不需要的特定自动配置类,则可以使用exclude属性@SpringBootApplication
来禁用它们,
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class MyApplication {
}
实体和依赖注入
使用@ComponentScan
(查找您的bean)和使用@Autowired
(进行构造函数注入)
@SpringBootApplication注释
-
@EnableAutoConfiguration
:启用Spring Boot的自动配置机制 -
@ComponentScan
:启用@Component
对应用程序所在的软件包的扫描 -
@Configuration
:允许在上下文中注册额外的bean或导入其他配置类
创建自己的自动配置
自动配置类使用@ConditionalOnClass
和@ConditionalOnMissingBean
注释,@ConditionalOnMissingBean注释是用来让开发者重写自动配置,如果他们不满意自己的缺省值一个常见的例子
@Configuration
@ConditionalOnClass
@EnableConfigurationProperties(MosesProperties.class)
public class MosesAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public MosesService getService() {
return new MosesServiceImpl();
}
}
查找自动配置候选人
Spring Boot检查发布的jar中是否存在META-INF/spring.factories
文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.moses.framework.starter.MosesAutoConfiguration
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
MosesProperties接收配置文件配置的参数
@Data
@ConfigurationProperties("spring.moses")
public class MosesProperties {
private String name = "moses";
private String region = "beijing";
}
接口MosesService
public interface MosesService {
String welcome();
}
实现类MosesServiceImpl
public class MosesServiceImpl implements MosesService {
@Autowired
MosesProperties mosesProperties;
@Override
public String welcome() {
return "welocme " + mosesProperties.getName() + " to " + mosesProperties.getRegion();
}
}
调用测试
添加依赖
<dependency>
<groupId>com.moses.framework</groupId>
<artifactId>moses-spring-boot-starter</artifactId>
<version>${framework.version}</version>
</dependency>
配置
spring:
moses:
name: 王者归来
region: 北京
调用
@Autowired
private MosesService mosesService;
@ResponseBody
@RequestMapping("/test")
public String addString() {
return mosesService.welcome();
}
测试