作者回复: 干得漂亮
作者回复: 是的,你提到了代理,可以把自己的实例注入进来,内部方法调用改为直接调用注入的实例。因为Spring其实是为你创建了一个代理,那我们调用代理就好了。其效果是一样的。
作者回复: 这是一种方法,还有种更简单的做法是把自己的实例注入进来,内部方法调用改为直接调用注入的实例。因为Spring其实是为你创建了一个代理,那我们调用代理就好了。
作者回复: 你说的这些如果是做Java后端的话,迟早都是要接触到的,个人觉得无所谓先后,建议先广泛地涉猎这些知识,并不一定要很精通,但要知道了解,一旦遇到了问题,要能在第一时间想到在哪里能找到相关的材料,能快速拎起来。
作者回复: 这……也是个办法,但不是我这个问题的本意哈
作者回复: 并不是改由代理类来创建,而是先创建了自身的实例A,然后再加了一层封装的代理B,Spring Bean注入给其他人时,注入的不是A,而是B。所以通过Bean来调用时,调用的是B.xxx(),在A自身内部调用内部方法时,调用的还是A.xxx()。
作者回复: 事务的确是AOP代理来实现的,不过你这里的A和B把我说晕了……把类的内部调用改成不同类之间的调用,其本质其实也是调用代理类的方法,所以效果是一样的。
作者回复: Redis不算RDBMS,算NoSQL,MySQL和Redis本来就没有自动的事务关联,你只能手写,在MySQL回滚时自己清理Redis。哪怕是两个MySQL,也没有很好的分布式事务实现,JTA这种性能不是很理想,基本都是要靠自己实现,关于分布式事务可以了解下BASE和TCC的概念。
作者回复: 有时会,这时可以用延时注入的方式解决。
作者回复: 你好,这个部分的确以应用为主一些,后续的章节有些地方会做展开,考虑到大部分同学的情况,不会在课程中就每个点都去展开,还请理解。相信你提了这个问题,那应该也能从我在课程中说道的Spring的事务其实是通过AOP实现的这句中理解事务的原理,对吧:-)