我们正在将我们的应用程序从JBoss Seam迁移到CDI(JEE6),所以我们正在改变一些像@In和@Out这样的语言,我们发现有很多信息对我们有帮助,但我们有一些麻烦试图找出来如何用特定模式替换anotations:
对于@In anotation
@Name("comprobantes")//context name
...
@In(create=false,value="autenticadoPOJO",required=false)
private UsuarioPOJO autenticadoPOJO;
我们可以使用CDI中的@Inject,但是如何为这种情况设置上下文变量的名称?。
@Out anotation
@Out(scope = ScopeType.SESSION, value = "autenticadoPOJO", required = false)
我已经阅读了一些博客,他们说我可以在CDI中使用@Produces,我们如何在添加此anotation之前或之后设置范围?
感谢任何帮助或任何有用的文档。
答案 0 :(得分:3)
我担心@Out
没有1:1的兼容性。
从技术上讲,Seam 2中的@Out
是通过所有方法调用的拦截器实现的 - 这被证明是一个非常严重的性能瓶颈。
在CDI中,大多数托管bean都是代理的,这使得在技术上不可能以Seam 2方式实现outjected。
你能做什么(好吧,你实际上必须做什么)正在经历@Out
的所有用法,并用一些@Producer逻辑单独替换它。在这里查看this official example。在Seam 2中,您可以将经过身份验证的用户输出到会话范围,在CDI中,一个小的生产者方法(几乎)相同。
希望能给你一个良好的开端,随时提出进一步的问题:)
答案 1 :(得分: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() {
...
}