SpringBoot——》核心注解
一、@SpringBootApplication:3个注解的组合
@SpringBootApplication
是启动类上的最重要的一个注解,是 3个注解的组合
,分别是
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
@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:对@Configuration的简单封装
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
功能:
- 用来代替
applicationContext.xml
配置文件,这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
注意:
@Bean
:用来代替 XML 配置文件里面的 <bean …> 配置@ImportResource
:如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的 XML 配置文件@Import
:用来引入额外的一个或者多个 @Configuration 修饰的配置文件类。
三、@ComponentScan
功能:
- 用来代替
配置文件中的 component-scan 配置
- 开启组件扫描,即
自动扫描
包路径下的@Component
注解,注册 bean 实例到 context 中
四、@EnableAutoConfiguration
功能:
- 用来
提供自动配置
包含2个注解 :
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}
1、@AutoConfigurationPackage
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {
}
是 自动配置包
,包括了一个 @Import注解
,给容器导入了自动配置包的注册器,将主启动类的所在包及包下面所有子包
里面的所有组件扫描到Spring容器
2、@Import(AutoConfigurationImportSelector.class)
是 导入自动配置导入选择器组件
,主要是从类路径下的META-INF/spring.factories中获取资源
自动装配原理:
- 1、从配置文件
META-INF/spring.factories
加载所有可能用到的自动配置类;- 2、
去重
,并将exclude和excludeName属性携带的类排除
;- 3、
过滤
,将满足条件(@Conditional)的自动配置类返回。