SpringBoot自动装配
1、SpringBoot自动装配是什么?
关键文件:META-INF/spring.factories
启动器:spring-boot-starter-XXX
文件中的配置的类型信息加载到Spring容器,并执行类中定义的各种操作,直接引入一个starter就可以使用对应的第三方组件的功能(例如:redis)
自动装配:可以通过注解或简单配置就能够在SpringBoot中实现某个技术功能。
2、SpringBoot自动装配的具体流程:
(1)核心注解@SpringBootApplication(包含@EnableAutoConfiguration、@Configuration、@ComponentScan)
@EnableAutoConfiguration(启动SpringBoot自动配置机制)
@Configuration(允许在容器中注册额外的bean或导入其它配置类)
@ComponentScan(扫描@Component、@Service、@Controller注解的bean)
(2)@EnableAutoConfiguration —— 实现自动装配的核心注解
@EnableAutoConfiguration通过 AutoConfigurationImportSelector类实现
(3)AutoConfigurationImportSelector类——加载自动装配类
通过SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动装配类
实现了ImportSelector接口中的selectImports()方法
(4)selectImports() 方法 —— 获取所有符合条件的类的全限定类名,并将这些类加载到ioc容器中
(5)getAutoConfigurationEntry()——负责加载自动装配类
(6)笼统流程:
1、判断自动装配是否打开
application.properties/application.yml中spring.boot.enableautoconfiguration=true
2、获取EnableAutoConfiguration注解中的exclude和excludeName
3、SpringFactoriesLoader获取需要自动装配的所有配置类,读取 spring.factories
读取XXXAutoConfiguration,按需加载组件
4、@ConditionalOnXXX 按需加载组件,满足条件,加载的类才会生效
例:@ConditionalOnBean:当容器中有指定Bean的条件下
@ConditionalOnClass:当类路径下有指定类的条件下
总结:SpingBoot所有的自动配置在启动时,会通过@SpringBootApplication中通过SpringFactoriesLoader进行扫描获取META-INF/spring.factories文件获取类,@SpringBootApplication其中的@EnableAutoConfiguration通过AutoConfigurationImportSelector类实现ImportSelector接口中的selectImports()方法,通过ConditionalOnXXX注解获取所有符合条件的类,然后调用getAutoConfigurationEntry()方法加载自动装配类。
3、SpringBoot中的run()方法
(1)SpringApplication.run(XXX.class,args) 通过反射启动
(2)SpringApplication类的作用
1、判断应用的类型是普通项目还是WEB项目
2、查找并加载所有可以的初始化器,设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
3、推动并设置main方法的定义类,找到运行的主类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通