7.14. Bean 代理
注入 Bean 的客户端通常不包含对 bean 实例的直接引用。除非 bean 是一个依赖对象,范围为 @Dependent
,否则容器必须使用代理对象重定向所有注入的 Bean 引用。
bean 代理(可称为客户端代理)负责确保接收方法调用的 bean 实例是与当前上下文关联的实例。客户端代理还允许 Bean 绑定到上下文(如会话上下文),从而无需递归地将其他注入的 Bean 序列化到磁盘。
由于 Java 的限制,容器无法代理一些 Java 类型。如果使用其中一个类型声明的注入点解析为具有 @Dependent
范围以外的 Bean,容器将中止部署。
某些 Java 类型不能由容器代理。包括:
- 无参数的非专用构造器的类.
-
被声明为
最终
或具有最终
方法的类. - 数组和原语类型.