当我在类中使用字段注入(inject)时,像这样:@InjectprivateMyClassmyField;我可以对这个字段的“safepublication”状态做任何假设吗?或者换句话说,假设MyClass本身是线程安全的,那么在使用该字段时是否应该注意任何并发风险?我的本能通常是尽可能创建所有字段final,但这不适用于字段注入(inject)。当然,我可以使用构造函数注入(inject),但我通常最终不得不创建一个额外的“假”无参数构造函数来进行代理。问题不大,但使用字段注入(inject)更方便。另一种选择可能是将该字段标记为易变的(或者甚至对其使用锁...),但这真的有
具有以下相当简单的代码和正确配置的基于JTA的持久性上下文:abstractclassAbstractRepository{@PersistenceContextprotectedEntityManagerem;@Transactionalpublicsynchronizedvoidpersist(Eentity){em.persist(entity);em.flush();}}@ApplicationScopedclassMyEntityRepositoryextendsAbstractRepository{}我在调用MyEntityRepository.persist()时遇到以下
这个问题在这里已经有了答案:WhyuseconstructoroversetterinjectioninCDI?(3个答案)关闭2年前。注入(inject)任何服务时,我有两个选择:字段注入(inject):@InjectprivateMyServicemyService;或构造函数注入(inject):privateMyServicemyService;@InjectpublicClassWhereIWantToInject(MyServicemySerivce){this.myService=myService;}为什么构造函数注入(inject)比字段注入(inject)好?
我正在尝试将构造函数注入(inject)模式应用于我的CDI应用程序中的bean,但遇到以下错误消息:15:18:11,852ERROR[izone.adams.webapp.error.IzoneExceptionHandler](defaulttask-40)org.jboss.weld.exceptions.UnproxyableResolutionException:WELD-001435:Normalscopedbeanclasswebapp.util.LoginManagerActionisnotproxyablebecauseithasnono-argsconstruct
我想使用JavaSwing编写一个简单的Java桌面应用程序。通常,我使用Spring框架进行依赖项注入(inject)并构建整个类结构。但是,我已经看到CDI变得越来越流行,并希望尝试一下。我想使用CDI对我的项目进行依赖注入(inject),但是我不知道如果没有Servlet容器(因为它使用的是Spring),是否可以做到这一点。每个教程似乎都与servlet容器或应用程序服务器有关。 最佳答案 这是您要寻找的:https://openwebbeans.apache.org/owbsetup_se.htmlCDI2.0要求使用独
我正在开发一个JavaEE应用程序,主要是带有JSF管理控制台的JAX-RS,它使用CDI/Weld通过javax.enterprise.context.ApplicationScoped进行依赖注入(inject)对象。除了小的调试问题外,CDI在这个项目中表现出色。现在我需要对CDI注入(inject)的对象生命周期进行一些非常粗粒度的控制。我需要能够:从应用程序上下文中删除注入(inject)的对象,或者销毁/删除/清除/重置/删除整个应用程序上下文,或者Definemyown@ScopeTypeandimplementingContext我可以在其中提供执行上述两项任务之一的方
我尝试使用MVP范例构建Web应用程序。因为我希望API干净并使所有内容都易于测试,所以我尝试通过ContructorInjection注入(inject)所有可能的内容。现在我到了一个有多个文本字段的View的地步。当数据库中有值时,演示者会填充这些文本字段,因此我的演示者需要View的引用,但vie显然也需要演示者的引用。CDI告诉我,将Presenter注入(inject)到View中是不可能的,因为存在循环依赖性。是否可以避免通过setter方法在View中设置演示者?代码看起来像这样:查看:publicClassViewImplimplementsview{privatePr
我正在编写一个JavaEE6Web应用程序,我注意到使用注入(inject)的对象与直接创建和使用该对象相比对性能有显着影响。每个方法调用的开销似乎约为50-60毫秒。例如,使用非注入(inject)的150次方法调用大约需要500毫秒,而使用注入(inject)对象的150次方法调用需要12,000-13,000毫秒。一个数量级的差异,然后是一些。这正常吗?我在JBossAS7.1.1final上运行,它使用Weld来处理CDI。注入(inject)的对象被定义为单例bean(通过javax.ejb.Singleton注释)。这会导致部分问题吗?还是只是Weld代理导致了速度下降?
我只想确认我完全理解CDI工作的先决条件。如果我有A类:publicclassA{@InjectprivateBb;}现在当我实例化这个类时使用:Aa=newA();在这种情况下,A.b将为空。但是如果我在另一个类中定义一个成员:@InjectAa;然后使用a,a.b会被正确填充吗?CDI是否仅在需要注入(inject)的类也由CDI容器创建时才起作用?或者,如果在使用带有new的普通实例化创建POJO时注入(inject)结果为空,我错过了什么(是的,我有beans.xml)? 最佳答案 DoesCDIonlyworkifthec
我正在尝试使用启动ejb在启动时做一些事情。但是我的bean从未被调用过。这是我的bean:importjavax.annotation.PostConstruct;importjavax.ejb.Startup;importjavax.inject.Singleton;@Singleton@StartuppublicclassStartupBean{@PostConstructpublicvoiddoSomething(){System.out.println("why??");}}我正在使用jboss7.1.1。我做错了什么?你可以在bitbucket找到我的源代码:https:/