为什么最终的课程无法与CDI合作?

时间:2012-05-23 14:22:28

标签: java dependency-injection cdi jboss-weld

CDI spec状态的第5.4.1节,如果声明为final,则其他有效bean无法发出(因此无法注入)。规范没有给出理由,我想不出这个决定的理由。

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

为什么会如此以及可以做些什么?

谢谢。

2 个答案:

答案 0 :(得分:4)

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

如果您想使用CDI,需要来进行非最终课程。另一个选择是不使用CDI。

答案 1 :(得分:1)

在最终类上使用方法拦截技术的唯一方法是通过更改类本身。这曾经是通过称为“增强”的过程完成的,其中类文件将在磁盘上更改;今天我们可以使用一种叫做加载时编织的东西。这是一种在加载类时更改类的技术。 AspectJ使用这种技术。

相关问题