CDI @Obeserves使用默认方法



也许我错过了一些东西,但是在Java 8中,我们可以在接口中使用默认方法,并且我正在尝试修改现有的方法,添加新的默认方法,该方法观察事件并在同一接口上调用旧方法签名,只是为了避免遗留Beans中的代码更改(在这种情况下,所有@ApplicationScoped(。前任:

public interface A {
    public void oldMehtod(Event evt);
    default void newMethod(@Observes Event evt) {
        this.oldMehtod(Event evt);
    } 
}

"newMethod"永远不会由实现此接口的 Bean 触发。我错过了什么?提前感谢!

从 CDI 规范中,您可能想阅读更多关于它的信息,然后只是这个引文:

观察者方法是托管 Bean 类或会话 Bean 类的非抽象方法...

你的不是托管 Bean 类的方法。您需要将该方法放在实际的 Bean 类上才能发现它。

我不能确切地告诉你为什么你不能在接口上安装它们,但我想这是一些硬性限制。这将是在CDI-dev邮件列表中提出的好问题。

最新更新