核心注解详解

@Configuration

这是Spring3.0添加的一个注解,用来代替applicationContext.xml配置文件,所有这个配置文件里面能做到的事情,都可以通过这个注解所在类来进行注册

@Bean

用来代替xml配置文件里面的配置

@ImportResource

如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的xml配置文件,有些老的配置文件无法通过@Configuration方式配置的,用这个注解应该可以

@Import

用来引入额外的一个或者多个@Configuration修饰的配置文件类

@SpringBootConfiguration

这个注解就是@Configuration注解的变体,只是用来修饰SpringBoot配置3而已,或者可利用于SpringBoot后续的扩展。底层是一个@Configuration注解,意思是被@Configuration注解修饰的类是一个IOC容器,支持javaconfig的方式来进行配置

@ComponentScan

这是spring3.1添加的一个注解,用来代替配置文件中的component-scan配置,开启组件扫描,即自动扫描包路径及其子包下的@Component、@Service、@Controller、@Repository等注解信息注册bean实例到context中

另外,该注解是可重复注解,即可以配置多个,用来配置注册不同的子包

@EnableAutoConfiguration

这是springboot诞生时添加的注解,用来提供自动配置,上面的两个都是spring-context包下的,不属于SpringBoot,所以spring3.0之后的去xml配置方式已经为springboot埋下伏笔

image.png

@AutoConfigurationPackage

这个注解是自动配置包,主要是使用@Import来给spring容器中导入一个组件,这里导入的是Registrar.class,通过这个类中的方法来获取扫描的包路径

@SpringBootApplication

申明让SpringBoot自动给程序进行必要的配置,是一个组合注解,这个配置等同于:@Configuration、@EnableAutoConfiguration和@ComponentScan三个配置

自动装配原理

SpringBoot启动的时候通过@EnableAutoConfiguration注解找到META-INF/spring.factories文件中的所有自动配置类(通过@Import(AutoConfigurationImportSelector.class)中的selectImports()方法),并对其加载,这些自动配置类都是以AutoConfiguration结尾来命名的。它实际上就是一个JavaConfig形式的IOC容器配置类,这些自动配置类还得看具体条件注解(@ConditionalOnXXX)是否生效。通过以Properties结尾命名的类中取得在全局配置文件中配置的属性,如server.port。
Properties类的含义:封装配置文件的相关属性。
AutoConfiguration类的含义:自动配置类,添加到IOC容器中。