spring boot自动装配原理(二)

语言: CN / TW / HK

theme: cyanosis

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

spring boot通过maven的形式加载好所有已经配置好的版本包加载到项目中,然后通过@SpringBootApplication复合注解加载启动整个项目,@SpringBootApplication是一个复合注解,它除了四个元注解之外还有以下几个注解组成,也是 spring boot 重要组成部分。

@SpringBootConfiguration

进入到@SpringBootConfiguration注解中发现除了四个元注解之外还有一个@Configuration注解

image.png

然后再看它下面的属性取的是proxyBeanMethods它取得来源其实也是来源于@Configuration里面

image.png

进入到@Configuration里面可以看到有一个proxyBeanMethods

image.png

所以@SpringBootConfiguration注解其实就是@Configuration注解,proxyBeanMethods的值为true代表着默认使用CGLIB代理该类。@Configuration可以保证绝对的单例。

@EnableAutoConfiguration

同样的点进这个注解里面去看看,除了四个元注解需要注意的就是@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage

@AutoConfigurationPackage注解的功能主要是由@Import注解实现的,它是spring框架的底层注解,它的作用就是给容器中导入某个组件类,比如@Import(AutoConfigurationPackages.Registrar.class)它就会将Registrar组件类导入到容器中。

@Import

spring boot的核心注解,主要的作用有: - 参数如果是普通类,将该类实例化交给IOC容器管理 - 参数如果是ImportBeanDefintionRegistrar的实现类,支持手工注册bean - 参数如果是ImportSelector的实现类,注册selectImports返回数组,数组内的内容是类的全路径,并放至Ioc容器中进行批量注册,简单点说就是如果是普通类那么就会将该类实例化交给IOC容器管理,什么是普通类就是除开上面两种情况都是普通类。

@ComponentScan

定义包的扫描规则并指定扫描包的路径,如果它不填写value的话就会扫描所在的包和子包