最近准备面试,所以会收集一些不懂得题目然后进行答案的搜索,以下答案基本都是来自网络,然后进行了一点删减和自己的总结,如果有侵权,请评论或者私信联系我,我马上删除
Spring 的七种事务传播
Spring的单例是怎么实现的?(单例注册表)
答:维护一个单例注册表,即HashMap,key为beanName, value为对应的bean,如果每次查找的都是同一个beanName,就返回同一个bean
如果是多例模式,则每次都生成新的bean并且不注册到单例注册表中
如果是单例模式,在第一次加载bean的时候锁住表并将bean添加到单例注册表中
Spring循环依赖的解决方法
答:如果是构造器的依赖循环,则无法解决
如果是field的依赖循环,spring通过三级缓存进行解决。
举例:“A的某个field或者setter依赖了B的实例对象,同时B的某个field或者setter依赖了A的实例对象”这种循环依赖的情况。
1、A首先完成了初始化的第一步,并且将自己提前曝光到singletonFactories中,此时进行初始化的第二步,发现自己依赖对象B,此时就尝试去get(B),发现B还没有被create,就去找B
2、接下来轮到B初始化,B在初始化第一步的时候发现自己依赖了对象A,于是尝试get(A),尝试一级缓存singletonObjects(肯定没有,因为A还没初始化完全),尝试二级缓存earlySingletonObjects(也没有),尝试三级缓存singletonFactories,由于A通过ObjectFactory将自己提前曝光了,所以B能够通过ObjectFactory.getObject拿到A对象(虽然