I'm setting up a new, JPA+Spring project. What is the difference (for me as a programmer) between:
<tx:annotation-driven transaction-manager="transactionManager" />
and
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
in my applicationContext.xml?
tx:annotation-driven element is used to tell Spring context that we are using annotation based transaction management configuration. transaction-manager attribute is used to provide the transaction manager bean name. transaction-manager default value is transactionManager but I am still having it to avoid confusion.
Annotation Type EnableTransactionManagement. Enables Spring's annotation-driven transaction management capability, similar to the support found in Spring's <tx:*> XML namespace. To be used on @Configuration classes to configure traditional, imperative transaction management or reactive transaction management.
So when you annotate a method with @Transactional , Spring dynamically creates a proxy that implements the same interface(s) as the class you're annotating. And when clients make calls into your object, the calls are intercepted and the behaviors injected via the proxy mechanism.
You can place the @Transactional annotation before an interface definition, a method on an interface, a class definition, or a public method on a class. However, the mere presence of the @Transactional annotation is not enough to activate the transactional behavior.
There is a huge difference between Proxies and byte code woven 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 woven 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With