该注解是spring context中的类,指示一个类声明了一个或多个Spring容器管理的bean,可以替代之前的xml形式的bean定义。AnnotationConfigApplicationContext可以通过该注解标记的类获取已经配置的类。
我们只需要在主类上加上该注解,就能启动spring boot 应用。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}
从源码可以看到它将@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解合在一起了。
标记一个类作为Spring Boot应用程序。 可以用作Spring标准@Configuration注解的替代方法,以便可以自动找到配置(例如在测试中)。 应用程序应该只包含一个@SpringBootConfiguration。
spring boot 开启自动配置,自动配置在spring-boot-autoconfigure 包中,spring boot可以根据你项目中的依赖包自动配置一些需要的bean, 里面的exclude和excludeName方法可以根据类和类名排除不需要的自动配置的bean, 详细的自动配置原理在后面会再次说明。
ConfigurationProperties 与@Value 不同,它可以将配置文件中的信息绑定到类中的属性上,不支持SpEL,可以结合JSR303完成数据校验. 注意只是使用@ConfigurationProperties 不能被注册到IOC容器,需要配合@Configuration或@EnableConfigurationProperties或者@ConfigurationPropertiesScan
@Configuration
@Data
@ConfigurationProperties("spring.datasource")
public class DataSourceConfig {
private String url;
private String username;
private String password;
}
也可以将配置文件中的值直接转化为list和map
//application.properties
test.list=one,two,three,four
user.userinfo.name=张三 user.userinfo.age=18
list
@Configuration
@ConfigurationProperties("test")
public class DevConfigProps {
private List<String> list;
map
@Configuration
@Data
@ConfigurationProperties("user")
public class UserMapConfig {
public Map<String,Object> userinfo;
}
顾名思义bean注册的条件,可以直接或间接用在@Component,@Configuration类标注的类上,或者@Bean方法上。该注解不支持继承。
在类路径下找到相应的类,条件成立,可以将当前类注册到spring容器中。
仅在该注解规定的类不存在于 spring容器中时,使用该注解标记的类将会注册到spring容器中,当放置在方法上时,默认时类型时方法的返回类型
@Configuration
public class MyAutoConfiguration {
@ConditionalOnMissingBean
@Bean
public MyService myService() {
...
}
}
上面示例中,如果BeanFactory中不包含MyService类型的bean,则条件将匹配。将MyServicebean注入到容器中。其他@ConditionalOnxxx套路和@ConditionalOnClass,@ConditionalOnMissingBean一样