持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
spring boot通过maven的形式加载好所有已经配置好的版本包加载到项目中,然后通过
@SpringBootApplication
复合注解加载启动整个项目,@SpringBootApplication
是一个复合注解,它除了四个元注解之外还有以下几个注解组成,也是 spring boot 重要组成部分。
@SpringBootConfiguration
进入到
@SpringBootConfiguration
注解中发现除了四个元注解之外还有一个@Configuration
注解
然后再看它下面的属性取的是
proxyBeanMethods
它取得来源其实也是来源于@Configuration
里面
进入到
@Configuration
里面可以看到有一个proxyBeanMethods
所以
@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的话就会扫描所在的包和子包