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类型

 

Notes:

BeanFactory 和 FactoryBean的区别

BeanFactory:spring IOC的接口,具体实现类有,DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等

 

FactoryBean:Bean接口,当生成某个bean所需要的配置比较复杂的时候,可以通过实现这个接口来生成Bean,通过对复杂的生成过程进行封装可以方便的实现bean的生成。getObject方法获取具体的bean,getObjject("beanName"),如果需要获取FactoryBean在getObject("&beanName")

 

详情参考:https://www.cnblogs.com/xingzc/p/9138256.html

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值