【发布时间】:2016-02-22 18:36:05
【问题描述】:
这可能是一个概念问题,而不是技术问题,但是我希望您能就如何继续向我提供一些建议。 我们正在开发一个大型 Java EE 7 应用程序,该应用程序无状态地工作并从客户端获取请求。每个请求都包含一个会话 ID,每个会话都包含大量特定于会话的域对象。 我们创建了一个 RequestScoped 类,其中包含我们领域对象的所有生产者方法。当请求带有会话 ID 时,我们调用生产者上的 setter 方法来设置生产者 CDI bean 中的会话 ID。 现在,如果链上的 RequestScoped 类之一需要域对象之一,它在类的开头有一个 @Inject 定义,以从生产者那里获取域对象。 Producer 本身与内存数据库建立连接,以从那里检索域对象并将它们保存在本地变量中以供将来在此请求中使用。
现在的问题是:假设 Bean A 注入域对象 X 并更改 X 上的一些属性。我是否必须在我的生产者中调用“更新”方法并将域对象 X 作为参数传递,还是在语境? 在请求范围内注入后,CDI 容器会创建一个代理来访问实际的 bean。该代理是否可以像常规参考一样使用?例如。如果我在注入的 bean 上调用一个方法,它会更新代理后面的 bean 吗?
【问题讨论】:
-
这听起来像是“我不太了解代理是什么”。您在这里所问的问题完全可以通过 CDI 使用代理的事实来解决;是的,它只是工作。您是不是因为您已经尝试过但没有如您预期的那样成功?
标签: java jakarta-ee dependency-injection cdi producer