1,@SpringBootApplication
这是 主启动类注解
在这个注解中我们会看见下面这些注解
在这里我就不对元注解进行介绍了
在这些注解里面
| 注解 | 释意 |
|---|---|
| @SpringBootConfiguration | 代表这是一个springboot中的配置类 |
| @EnableAutoConfiguration | 开启自动配置,会去自动读取到spring.factories文件(读取过程我在Spring Boot自动配置原理中有讲) |
| @ComponentScan | 组件扫描,默认会扫描到当前包及其子包下的类上注解 |
补充:
1,@SpringBootConfiguration
在@SpringBootConfiguration中可以看出它与@Configuration注解如出一辙
所以我们可以选用这两个注解中的任意一个来声明一个配置类(不要同时使用)
2,@ComponentScan
我们可以通过数组形式手动指定需要扫描的包
例如
如此便可扫描到com包以及test包内类上的注解了
2,@ConfigurationProperties
@ConfigurationProperties是SpringBoot提供的重要注解, 他可以将一些配置属性批量注入到bean对象。 例如现在有一个application.yml配置文件
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.driver
url: jdbc:mysql:///springboot_01
username:root
password:123456
如果不使用@ConfigurationProperties注解使用@Value一个个注入
@Component
public class DataSourceProperties {
@Value("${spring.jdbc.datasource.driverClassName}")
private String driverClassName;
@Value("${spring.jdbc.datasource.url}")
private String url;
@Value("${spring.jdbc.datasource.username}")
private String username;
@Value("${spring.jdbc.datasource.password}")
private String password;
// 省略getter和setter.....
}
如果使用批量注入注解
@Component
@ConfigurationProperties(prefix = "spring.jdbc.datasource")
public class DataSourceProperties2 {
private String driverClassName;
private String url;
private String username;
private String password;
// 省略getter和setter.....
}
需要保证
- (prefix = "spring.jdbc.datasource")中的前缀和属性名与配置文件中的key相同
- 使用@EnableConfigurationProperties(DataSourceProperties2.class),开启DataSourceProperties2身上的@ConfigurationProperties注解
例如:
@Controller
@EnableConfigurationProperties(DataSourceProperties2.class)
public class HelloController {
@Autowired
private DataSourceProperties2 dataSourceProperties2 ;
@RequestMapping(path = "/hello")
@ResponseBody
public String sayHello(){
System.out.println(dataSourceProperties2);
return "hello spring boot";
}
}
如此便可保证自动注入成功
如果报错
需要我们在依赖中添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3,@ConditionalXxx
这是Spring Boot中的条件化配置注解 这些注解的作用就是如果满足条件, 该配置类就生效, 如果不满足该配置类就不生效 常用的条件化选择注解如下 :
| 注解 | 作用 |
|---|---|
| @ConditionalOnBean | 如果存在某个Bean, 配置类生效 |
| @ConditionalOnMissingBean | 如果不存在某个Bean, 配置类生效 |
| @ConditionalOnClass | 如果存在某个类, 配置类生效 |
| @ConditionalOnMissingClass | 如果不存在某个类, 配置类生效 |
| @ConditionalOnProperty | 如果存在某个属性配置, 配置类生效 |
| @ConditionalOnWebApplication | 如果是一个web应用, 配置类生效 |
| @ConditionalOnNotWebApplication | 如果不是一个web应用, 配置类生效 |
我们看到自动配置类上就有一些条件化配置注解
试想一下:
我们可以用这个注解做什么东西呢?(比如手写数据源启动器支持配置数据源类型)