There is a huge difference between Proxies and byte code weaven aspects.
Proxies can only intercept if the invocation comes from “outer space”, but not if the invocation comes from the object itself (this.transactionalMethod())
This means if you have a Class with two methods, T and B. Method T
has a transaction annotation, and method B
invokes T
by “this.T()
”, then the proxy is never invoked (for T
) so there is no transaction handling in this case!
If you use AspectJ the transaction handling code is weaven in the byte code of T
, and it will be executed no matter if the invocation comes from the object itself or from an other object.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…