为什么最终类不能用 CDI 代理?

kos*_*tja 2 java dependency-injection cdi jboss-weld

CDI 规范的第 5.4.1 节指出,如果声明了 ,否则有效的 bean 是不可代理的(因此无法注入)final。规范没有给出任何理由,我想不出这个决定的理由。

我试图坚持设计规则,说没有明确设计用于继承的类应该禁止它。因此,CDI 规范似乎强制执行了糟糕的设计(并使 CheckStyle 哭泣)。

为什么会这样,我们可以做些什么?

谢谢你。

Mau*_*res 5

因为当你为一个类创建代理时,你是从它继承的(或者实现一个接口,如果可能的话),所以如果你的类是最终的,它就不能被继承,也不能为它创建代理。

如果你想使用 CDI,你需要有一个非最终类。另一种选择是不完全使用 CDI。