5

我们正在将我们的应用程序从 JBoss Seam 迁移到 CDI (JEE6),因此我们正在更改一些注释,例如 @In 和 @Out,我们发现很多信息很有帮助,但是我们在尝试找出如何替换时遇到了一些麻烦具有特定模式的注释:

对于@In 注释

@Name("comprobantes")//context name
...
@In(create=false,value="autenticadoPOJO",required=false)
    private UsuarioPOJO autenticadoPOJO;

我们可以使用 CDI 中的@Inject,但是如何为这种情况设置上下文变量的名称呢?

对于@Out 注释

@Out(scope = ScopeType.SESSION, value = "autenticadoPOJO", required = false)

我读过一些博客,他们说我可以在 CDI 中使用@Produces,我们如何在添加此注释之前或之后设置范围?

我感谢任何帮助或任何有用的文档。

4

2 回答 2

3

恐怕没有像 1:1 兼容性这样的东西@Out

从技术上讲,@OutSeam 2 是通过一个拦截器来实现所有方法调用的——结果证明这是一个相当大的性能瓶颈。

在 CDI 中,大多数托管 bean 都是代理的,这使得以 Seam 2 方式实现喷射在技术上是不可能的。

您可以做的(嗯,您实际上必须做的)是遍历所有用法,@Out并用一些 @Producer 逻辑单独替换它。在这里查看这个官方示例。在 Seam 2 中,您会将经过身份验证的用户投射到会话范围内,而在 CDI 中,一个小的生产者方法(几乎)做同样的事情。

希望这会给您一个良好的开端,请随时提出更多问题:)

于 2012-04-12T07:05:26.003 回答
2

http://docs.jboss.org/weld/reference/1.0.0/en-US/html/producermethods.html

8.1。生产者方法的范围

生产者方法的范围默认为@Dependent,因此每次容器注入此字段或解析为相同生产者方法的任何其他字段时都会调用它。因此,每个用户会话可能有多个 PaymentStrategy 对象实例。

要改变这种行为,我们可以在方法中添加一个@SessionScoped 注解。

@Produces @Preferred @SessionScoped
public PaymentStrategy getPaymentStrategy() {
   ...
}
于 2012-04-12T01:25:13.173 回答