Spring三级缓存问题?

使用三级缓存而不是二级缓存的原因是什么?
有的博客说是避免出现多个代理对象
还有的说是为了减少Bean对象引用的提前暴露
大家认为是为啥? #Java#
全部评论
三级缓存主要为了代理模式,做一个工厂,然后确定是否需要经过代理,然后将半成品(非代理/代理增强)放入二级缓存
3 回复 分享
发布于 2023-12-31 14:05 浙江
应该是和bean的生命周期相关,好像最开始就是两级缓存,后面加入了动态代理,改成了三级缓存,我在别的地方看到过帖子
2 回复 分享
发布于 2024-01-07 00:48 陕西
解决循环依赖吧
2 回复 分享
发布于 2023-12-31 16:03 陕西
网上大部分说的什么第三级关于aop都是不对的,其本质原因是如果只有两级,那么每次调用lambda表达式都是创建一个新的对象,因为在一个完整的依赖流程没有结束前,每次调用都是返回一个新的bean。首先明确一点一个完整的bean是需要实例化+初始化都完成了才会被放入一级缓存,那么比如a依赖b和c,b依赖a,c依赖a,那么执行流程是实例化a,发现需要b,实例化b,发现需要a,去一级缓存找到a没找到,去二级缓存找a没找到,去三级缓存创建a,半成品a被保存到二级缓存(由于a还有c需要创建,所以a暂时只会留在二级缓存,不会去一级缓存),b里面a使用的就是半成品对象,b被放入一级缓存,(现在b的流程结束了,返回对象a),发现a还是需要c,实例化c,发现c也需要a,去一级缓存里找没找到a,去二级缓存里面找,找到半成品a了,直接拿来用。看到了关键了吗?如果没有二级缓存,那在这里,c同样会去调用lambda表达式弄一个新的a出来,这也破坏了单例了,彻底错了
1 回复 分享
发布于 2024-01-21 18:56 上海
我觉得是保证bean的"单例属性",一个beanname对应一个bean,如果A有两个循环依赖,然后正好还进行了aop,不用三级缓存就会存两个代理对象。
1 回复 分享
发布于 2024-01-10 19:47 广西
二级缓存装的是半成品bean,考虑不用第三级只用前两级的情形:a实例化,放入二级缓存,属性填充 此时发现a依赖新bean b,去做bean b的创建,b实例化,放入二级缓存,属性填充 此时发现b依赖a 去二级缓存找a 命中了 给b装配上a。 在不考虑代理的情形,这是没问题。但如果a用了aop 真正该用的是a的aop增强的代理对象,但前面的逻辑b装配上的却是原始a! 第三级缓存我理解是去存了beanName,原始bean实例以及真正所需bean对象的创建逻辑。aop的话应该是用了个beanpostprocessor
1 回复 分享
发布于 2023-12-31 01:30 上海
应该是为了在没有出现循环依赖的情况下延迟代理对象的生成。
点赞 回复 分享
发布于 2024-04-11 14:39 湖北
打破循环依赖
点赞 回复 分享
发布于 2024-02-14 18:06 湖南
m
点赞 回复 分享
发布于 2024-02-04 20:58 广东
我觉得是本来aop代理是要在初始化之后生成的,但是如果没有三级缓存那你就必须在初始化之前给所有bean生成代理对象,这违背了spring结合aop的一个设计
点赞 回复 分享
发布于 2024-01-26 14:17 陕西
m
点赞 回复 分享
发布于 2024-01-25 00:55 广东
使用三级不是二级的主要目的是为了解决循环依赖问题中,在装配时产生动态代理对象和初始对象
点赞 回复 分享
发布于 2024-01-10 19:30 海南
没有第二级缓存,无法判断是否存在循环依赖。
点赞 回复 分享
发布于 2023-12-31 01:25 浙江

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
投递地平线等公司10个岗位
点赞 评论 收藏
分享
评论
5
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务