阜宁做网站哪家好,网站后台更新图片,还有人用asp做网站吗,做教育行业网站testService1和testService2相互依赖
当Spring创建testService1对象时#xff0c;它会先从一级缓存中查找是否存在testService1的实例。如果缓存中不存在testService1实例#xff0c;它将继续查找二级缓存中是否存在testService1。如果二级缓存中也不存在testService1实例它会先从一级缓存中查找是否存在testService1的实例。如果缓存中不存在testService1实例它将继续查找二级缓存中是否存在testService1。如果二级缓存中也不存在testService1实例则Spring会尝试从三级缓存中获取testService1的Bean工厂。
在三级缓存中Spring会根据testService1的定义来创建一个新的Bean工厂对象该工厂对象用来创建testService1实例。创建完成后Spring会将该工厂对象添加到三级缓存中并提前暴露Bean对象。这个过程中testService1并没有被实例化仍然是一个空对象。
当testService1需要进行属性赋值的时候发现还有一个testService2它没有赋值。这时testService1会从一级缓存中去查找testService2是否已经有实例化的对象。如果在一级缓存中没有找到那么它就会去二级缓存中查找看是否已经有创建好的但是没有给属性赋值的对象。如果在二级缓存中也没有找到那么它就会去三级缓存中查找看是否有对象工厂可以创建提前暴露到bean的对象。如果都没有找到那么Spring就会创建新的实例然后将其添加到三级缓存中。三级缓存中存放的是包含Bean工厂对象的ObjectFactory对象用来创建提前暴露到bean的对象。
这个时候testSerivce2对象里面发现testService1里面没有赋值然后对testService1进行赋值从一级缓存去查看发现没有去二级查看发现没有去三级查看发现有就把testService1从三级缓存添加到二级缓存里面存放已经在内存空间创建好但是还没有给属性赋值的testService1对象把testService1三级缓存用来创建提前暴露到bean的对象删除。
这个时候testService2里面有实例对象对象里面testService1的所有属性都被正确地赋值之后testService2实例化完成了之后才把这个对象移动到一级缓存里面存存放实例化testService2对象把三级缓存里面的testService2删除。
这个时候testService1里面的testService2属性就可以从一级缓存里面获取这个testService2实例了把它进行赋值填充testService1也完成了实例化把testService1从二级缓存添加到一级缓存里面把testService1在二级缓存的实例也删除。