首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >桌面应用中的CDI

桌面应用中的CDI
EN

Stack Overflow用户
提问于 2017-01-18 01:16:13
回答 1查看 1.6K关注 0票数 1

我正在创建一个可供WEB或桌面应用程序使用的JAR。这个JAR应该有一些带有@RequestScoped类和其他CDI注释的类,所以我对它有一些疑问:

1)我知道@RequestScoped只是用于HTTP请求,但是我如何在桌面应用程序中使用它呢?有可能吗? 2)我正在使用这种依赖:

代码语言:javascript
复制
<dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>2.4.1.Final</version>
        </dependency>

但这种依赖只是为了焊接WEB,我需要一些更通用的,应该在WEB或桌面工作。

如果我使用“焊缝-se”作为依赖,我的JAR将只在桌面上工作,我不想这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-18 08:42:46

正如用户MouseEvent在评论中所说的那样,通常最好有两个单独的罐子。

但是,我想回答的是关于非web环境中的@RequestScoped bean的问题(还有@Session@Application)。那么,假设我们正在SE环境中使用焊接--那么,什么是有效的,哪些是无效的呢?

  • @ApplicationScoped 可以很好地工作,就像您预期的那样。每个应用程序一个bean。它的生命周期从启动容器开始,在关闭容器时停止。另一种替代方法是使用@javax.inject.Singleton (注意,这是CDI单例,而不是CDI单例) bean,但应该仅限于SE --这同样适用于应用程序作用域bean,但没有创建代理。在某些情况下,这可能会使您占上风,但也会防止序列化之类的事情。
  • @SessionScoped目前不能在SE环境中工作,因为它在那里没有任何意义。就像你自己说的,你在那里没有时间。
  • @RequestScoped 确实在SE中工作。这是有意义的,因为“请求”不仅仅意味着普通的旧HTTP请求。但是,您需要处理这个范围的激活。虽然有几种方法(例如扩展上下文和自己处理激活),但我建议使用Weld API-@ActivateRequestContext中提供的注释(实际上是拦截器绑定)。您只需将注释放在方法的顶部,Weld将在方法启动之前激活请求上下文,然后关闭它。您也可以将它放在整个类中,这意味着它将适用于每个方法。请注意,您需要依赖于Weld API才能访问该注释(或者您需要使用CDI2.0(在此也增加了中)。

至于您的依赖关系,在SE环境中,您需要这样的环境:

代码语言:javascript
复制
<dependency>
   <groupId>org.jboss.weld.se</groupId>
   <artifactId>weld-se</artifactId>
   <version>2.4.1.Final</version>
</dependency>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41709859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档