spring核心流程

ApplicationContext与BeanFactory的区别?


Application接口定义类图.png

BeanFactory是Spring的顶层接口设计,ApplicationContext接口是BeanFactory的子类,具有BeanFactory所有的功能之外,还继承了ResourceLoader(资源加载)/MessageSource(国际化)/ApplicationEventPublisher(事件派发)/EnvironmentCapable(环境配置)等功能

FactoryBean与Bean的区别?
普通Bean注册的对象就是本身。
工厂Bean实现了FactoryBean接口,重写了getObject()。注册的对象不是工厂Bean本身,而是getObject()里面的对象。例如:SqlSessionFactoryBean
1.工厂Bean在spring中一开始保存的是工厂本身对象
2.第一次获取或注入工厂Bean实际对象,会遍历所有BeanDefinitions,找到类型为Bean实际对象
3.遍历中发现是FactoryBean.判断getObjectType()类型是否是要找的Bean实际对象。则返回getObject()创建的对象
4.singletonObjects单实例对象池不会存放getObject()创建的对象,而是放在
Map<String,Object> factoryBeanObjectCache;

InitializingBean:
Bean初始化之后的后续处理,没有传递实例对象。额外的功能处理,不在于改变Bean对象。
BeanPostProcessor与InitializingBean区别?
BeanPostProcessor所有组件都会用到的后置增强
InitializingBean只针对单组件的增强

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:*.xml");
context.getBean();
到底发生了什么?
大致思路.jpg
Spring容器启动完整过程
Spring容器启动完整过程.jpg
Spring是如何解决循环依赖?
Spring是如何解决循环依赖.jpg
AOP切面是如何实现的?
SpringAop实现流程.jpg

AOP类图.png

SPI机制:
实现工程中 resource/META-INF/services/接口全路径作为文件名
文件内容为实现类全路径
通过ServiceLoader.load(class); 动态得到所有实现类

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容