我正在开发JAVA EE 6应用程序。我广泛使用CDI,我的问题是,@ Inject和@Produces是否与Seam的@In和@Out相同?有了CDI之后,是否仍在使用@In和@Out批注?

最佳答案


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


@Inject@Produces并不完全相同,但大致相同。主要区别在于,Java EE 6依赖关系在需要时生成(由需要依赖关系的组件控制),而在Seam 2中,一旦准备好在其他地方使用某个东西(由提供该组件的组件控制),就会进行喷射。依赖)

以登录为例:

在Seam 2中的

  • 中,已成功通过身份验证的用户在成功登录后立即被抛入所需的范围(如 session )。登录组件本身的范围通常适合用例(对话),但不适合所提供的依赖项的范围( session )。
  • 在Java EE 6中的
  • 中, session 范围的登录组件执行身份验证并将已身份验证的用户存储在私有(private)字段中。然后,该字段由生产者方法控制。因此,每当另一个组件请求经过身份验证的用户时,都会执行以下操作:
      @Produces @LoggedIn User getCurrentUser() {
          return user;
       }
    

  • 这是为什么?我听到你在问...

    原因很简单。 Weld/Java EE 6通过能够代理(大多数)依赖项而获得了巨大的性能提升。而且根本不可能代理喷射:-)

    好吧,除此之外:Java EE 6需求导向方法(在需要时进行请求)比Seam 2(生产并存储起来)感觉更好。

    关于jakarta-ee - 接缝双射和熔接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5532655/

    10-13 09:37