Assume an arrangement like this:
interface MyInterface {
void foo();
}
class MyClass implements MyInterface {
@TransactionalEventListener
void foo() { … }
}
In this case, TransactionalApplicationListenerMethodAdapter
is invoked with MyClass
as target class, but MyInterface.foo()
as method. The annotation lookup then fails, as only the interface method is inspected, not the one on the target class.