有两个类A B,各自都有被@Transactional注解的方法,且这两个类互相引用了,最终导致A类里面持有的不是B的代理,而是B本身。当时处理的时候在A里面把B的引用设置为@Lazy解决掉了。
public Class ClassA {
@Autowired
@Lazy
private ClassB classB
......
}
可后面就再也复现不了了,即使把@Lazy去掉了也没问题。这问题发生已经两年了,每每思索都没相通
因为Spring里面循环引用是可以处理的,什么情况才会导致注入的不是代理对象而是ClassB本身呢?我当时想的是可能ClassB被什么东西引用了,导致它的实例化大幅提前,甚至比BeanPostProcessor更早,这样切面就切不到它了,没办法为他创建代理,它的Beanj就是它自身。可后面检查了,并没有这种情况。真是奇了怪了
我也遇到过,代码运行的好好的,半年多了,也没人改,突然就循环依赖了,然后怎么重启都不行,加上@lazy注解以后问题消失,百思不得其解