7.14. Bean 代理

注入 Bean 的客户端通常不包含对 bean 实例的直接引用。除非 bean 是一个依赖对象,范围为 @Dependent,否则容器必须使用代理对象重定向所有注入的 Bean 引用。

bean 代理(可称为客户端代理)负责确保接收方法调用的 bean 实例是与当前上下文关联的实例。客户端代理还允许 Bean 绑定到上下文(如会话上下文),从而无需递归地将其他注入的 Bean 序列化到磁盘。

由于 Java 的限制,容器无法代理一些 Java 类型。如果使用其中一个类型声明的注入点解析为具有 @Dependent 范围以外的 Bean,容器将中止部署。

某些 Java 类型不能由容器代理。包括:

  • 无参数的非专用构造器的类.
  • 被声明为 最终 或具有 最终 方法的类.
  • 数组和原语类型.