使用默认方法的 CDI @Obeserves

CDI @Obeserves with default methods

也许我遗漏了一些东西,但是使用 Java 8 我们可以在接口中使用默认方法,我正在尝试修改现有方法,添加一个新的默认方法来观察事件并调用同一接口的旧方法签名,只是为了避免遗留 Bean 中的代码更改(在本例中,所有 @ApplicationScoped)。例如:

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

"newMethod" 永远不会被实现此接口的 Bean 激发。我缺少什么?提前致谢!

来自 CDI specification,你可能想阅读更多关于它的内容,然后只是这个引用:

An observer method is a non-abstract method of a managed bean class or session bean class...

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

我不能确切地告诉你为什么你不能在界面上使用它们,但我想这是一些硬性限制。在 CDI-dev mailing list.

上问这个问题是个好问题