java-ee – Seam bijection和Weld

我正在开发一个JAVA EE 6应用程序.我正在广泛使用CDI,我的问题是@Inject和@Produces是否与@In和@Out一样用于Seam?现在我们有CDI,@ In和@Out注释是否仍在使用?
最佳答案

Are @In and @Out annotations still
used now that we have CDI?

@In和@Out是Seam 2注释,因此它们不在Java EE 6中使用.

My question is, are @Inject and
@Produces the same as @In and @Out for
Seam?

@Inject和@Produces并不完全相同,但它们大致相同.主要区别在于Java EE 6依赖关系是在需要时生成的(由需要依赖关系的组件控制),而在Seam 2中,只要有东西准备好在其他地方使用,就会执行outjection(由提供的其他组件控制)依赖)

以登录为例:

>在Seam 2中,经过身份验证的用户在成功登录后立即被注入所需范围(如会话).登录组件本身具有通常适合用例(对话)的范围,但不符合所提供依赖关系的范围(会话).
>在Java EE 6中,会话范围的登录组件执行身份验证并将经过身份验证的用户存储在私有字段中.然后,该字段由生产者方法控制.因此,每当另一个组件请求经过身份验证的用户时,就会执行以下操作:

  @Produces @LoggedIn User getCurrentUser() {
      return user;
   }

这是为什么?我听你问……

原因很简单. Weld / Java EE 6能够代理(大多数)依赖项,从而获得巨大的性能提升.并且根本不可能代理注射:-)

好吧,除此之外:Java EE 6以需求为导向的方法(在需要时请求它)感觉优于Seam 2(生成它并将其存储起来).

转载注明原文:java-ee – Seam bijection和Weld - 代码日志