springboot自动装配原理
2021-08-13 19:43:10 0 举报
springboot自动装配原理
作者其他创作
大纲/内容
调用SpringFactoriesLoader.loadFactoryNames方法
当然,spring最强大的功能在于扩展性,它会将所有的bean信息存放在一个spring.factories文件中
解决思路
实现了importSelect接口的实现类
导入配置类AutoConfigurationImportSelector.class
selectImports方法
继续导入一个实现ImportSelector接口的子接口DeffredImportSelector实现类,比如AutoConfigurationImportSelector接着重写selectImport方法
思路:借鉴springboot读取spring.factories读取配置类机制,可以新建一个项目,然后在自己的项目中的META-INF目录下也新加一个spring.factories文件,里面放入自己定义的配置类key,value
入口
三:@Import(AutoConfigurationImportSelector.class)
SpringBoot
process方法
https://www.processon.com/view/link/5fc0abf67d9c082f447ce49b
这个类实现了DeferredImportSelector接口中的内部接口Group的2个方法
@Import
过滤完之后就返回给spring,进行bean的加载
@BeansqlSessionFactory(自定义的sqlSessionFactory)
SpringBoot自动装配原理
返回一个AutoConfigurationGroup类
调用loadSpringFactories方法
EnableAutoConfigurations.class
开启自动装配功能
脚手架
将这些类存放到一个list中,然后返回给spring,最后spring就可以管理这些bean
@EnableXXXX
返回所有的有效自动配置类
调用getCandidateConfigurations方法
扫描所有jar包中的spring.factories文件中的类信息
思考:如何自定义一个自动配置类starter呢?比如springboot没有和mybaties建立默认的自动配置类,那么我想自己定义一个跟mybaties相关的自动配置类,应该如何做呢?
调用getAutoConfigurationEntry方法
实现ImportSelector的子接口DeferredImportSelector
实现了ImportBeanDefinitionRegister的实现类
二:@EnableAutoConfiguration
@ConditionalOnBean(sqlSessionFactory.class)sqlSessionFactory(springboot默认加载的sqlSessionFactory)
该注解可以批量导入很多的BeanDefinitions
传入想要哪些配置类key对应的值
getImportGroup()方法
最大的缺点是控制不了自己定义的bean信息和springboot默认的bean信息的加载到ioc容器中的顺序(无法控制@Bean对应的sqlSessionFactory先加载到ioc中)
@ImportSelector
inport(类)
实现getImportGroup()方法
该接口可以对自定义的bean和spring中的bean进行排序,优先加载自定义的bean
@ImportBeanDdefinitionRegister
Group接口
根据key从所有starter对应的jar包中META-INF/spring.factories文件中读取对应的配置类
一:@SpringBootApplication
0 条评论
回复 删除
下一页