使用默认方法的 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.
上问这个问题是个好问题
也许我遗漏了一些东西,但是使用 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.
上问这个问题是个好问题