Spring源码解析复习

1.spring中如何解决循环依赖问题?

首先我们来说一下什么是循环依赖,所谓的循环依赖是指A类中有B类的属性,而B类中包含A类的属性。

spring中解决循环依赖有个前置条件,就是只针对scope是singleton的类才对循环依赖的问题给予解决,对prototype类型的不支持会抛出异常。spring在创建bean的时候,是不等bean创建完成就会将创建bean的objectFactory提前曝光,也就是将objectFactory加入到缓存中去,一但下一个bean创建的时候需要依赖上一个bean则直接使用objectFactory。

Spring在加载bean的时候都会首先去缓存中查找。

spring中加载bean时涉及到的缓存map的解释如下:

singletonObjects:用于保存BeanName和创建bean实例之间的关系,bean name--->bean instance;

singletonFactories:用于保存beanName 和创建bean工厂之间的关系。bean name-->ObjectFactory;

earlySingletonObjects: 也是用于保存BeanName和创建bean实例之间的关系,不同的是,当一个单例bean被放在这里面后,那么当bean还在创建过程中,就可以通过getBean方法获取到了,其目的是用来检查循环引用。

registeredSingletons:用来保存当前所有已注册的bean;

2.spring中的factoryBean接口。

spring提供了一个factoryBean的工厂类接口,用户可以通过实现该接口定制实例化bean的逻辑。

其中有几个方法:

1). T getObject():返回由FactoryBean创建的bean实例

2).boolean isSingleton();返回判断bean的作用域是singleton还是prototype

3)Class<T> getObjectType():返回FactoryBean创建的bean类型

发布了16 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/BeNiceman/article/details/105128301