在以下情况中,
public class Base {
@Transactional
public void doSave() {
// ...
}
}
public class Inherited extends Base {
public void someMethod() {
super.doSave();
}
@Override
public void doSave() {
super.doSave();
}
}
如果我将@Transactional
注释添加到Inherited.someMethod
,则会毫无问题地调用拦截器。
但是,如果没有继承类的注释,拦截器就不会参与Inherited.someMethod()
对超类的调用。
此外,调用Inherited.doSave()
似乎也没有调用拦截器。我原以为超类上的注释在子类上也是有效的。这不是预期的行为吗?
我正在使用Apache DeltaSpike进行@Transactional
注释,而这正在被视为一场战争(在技术上就像是一场战争中的一个罐子)。但是,这可能不相关,因为尝试使用自定义拦截器会显示相同的行为。
这是JBoss EAP 6.3.0 Alpha的相关案例。
答案 0 :(得分:2)
这是预期的。仅在管理对象时才应用拦截器。当你以这种方式用继承方式编写它时,它不会被应用,因为它不是CDI所知道的调用堆栈的一部分。您需要将Base
注入您的课程并致电Base.doSave