sen*_*iwu 6 java cdi jakarta-ee
我正在阅读Oracle Java EE 6 教程和“Beans as Injectable Objects”部分下,它说
可以注入以下类型的对象:
(几乎)任何 Java 类
会话豆......
无法注入的 Java 类的示例是什么?这只是他们提到的一些理论上的技术限制,还是可以注入的类有已知的限制?
从规范,ch。2.2.1:
几乎任何 Java 类型都可能是 bean 的 bean 类型:
- bean 类型可以是接口、具体类或抽象类,并且可以声明为 final 或具有 final 方法。
- bean 类型可以是具有实际类型参数和类型变量的参数化类型。
- bean 类型可以是数组类型。仅当元素类型相同时,才认为两种数组类型相同。
- bean 类型可以是原始类型。原始类型被认为与它们在 java.lang 中对应的包装器类型相同。
- bean 类型可以是原始类型。
类型变量不是合法的 bean 类型。包含通配符类型参数的参数化类型不是合法的 bean 类型。
请注意,第 5.4.1 节“不可代理的 bean 类型”中为具有正常作用域的 bean 指定了某些附加限制,如第 6.3 节“正常作用域和伪作用域”中所定义。
然后是参考部分:
容器不能代理某些合法的 bean 类型:
- 没有没有参数的非私有构造函数的类,
- 声明为 final 或具有 final 方法的类,
- 原始类型,
- 和数组类型。
总结一下:任何 Java 类型(包括接口、抽象类)都可以是 CDI bean,除非它是“正常范围”并且至少满足以下一项:
int,double等)或阵列Normal-scoped (eg @Application-, @Session-, @RequestScoped) 意味着它需要被容器代理,因此上述限制可能被“不可代理”代替。@Dependent并且@javax.inject.Singleton是不正常的范围,他们是伪范围。
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |