繁体   English   中英

CDI 1.0 / JEE6中的超级方法拦截器

[英]Interceptor on super method in CDI 1.0/JEE6

在以下情况下,

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()似乎也不会调用拦截器。 我希望超类上的注释在子类上也有效。 这不是预期的行为吗?

我正在对@Transactional注释使用Apache DeltaSpike,并且将其部署为耳战(技术上是部署为耳战)。 但是,这可能不相关,因为尝试使用自定义拦截器会显示相同的行为。

如果相关的话,这是JBoss EAP 6.3.0 Alpha。

这是预期的。 仅在管理对象时才应用拦截器。 当您使用继承方式编写它时,由于它不是CDI知道的调用堆栈的一部分,因此不会应用它。 您需要将Base注入到您的类中并调用Base.doSave

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM