我知道有很多文章解释了如何在JavaEE中使用CDI,但我无法弄清楚这实际上带来了什么优势。例如,假设我有一个当前使用Foo实例的类。我可能会这样做FoomyFoo=newFoo();或//Better,FooFactorymightreturnamockobjectfortestingFoomyFoo=FooFactory.getFoo();我一直在阅读,使用CDI我可以做到:@InjectFoomyFoo;但是为什么这比以前基于工厂的方法更好呢?我假设还有其他一些我不知道的用例,但我无法确定这一点。如果我理解了下面的回答,那么这个概念就是DI框架充当集中配置的主对象工厂。这是一个合
我知道有很多文章解释了如何在JavaEE中使用CDI,但我无法弄清楚这实际上带来了什么优势。例如,假设我有一个当前使用Foo实例的类。我可能会这样做FoomyFoo=newFoo();或//Better,FooFactorymightreturnamockobjectfortestingFoomyFoo=FooFactory.getFoo();我一直在阅读,使用CDI我可以做到:@InjectFoomyFoo;但是为什么这比以前基于工厂的方法更好呢?我假设还有其他一些我不知道的用例,但我无法确定这一点。如果我理解了下面的回答,那么这个概念就是DI框架充当集中配置的主对象工厂。这是一个合
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭去年。Improvethisquestion我们计划从头开始编写一个Web应用程序,已决定使用符合JavaEE6标准的最新版Glassfish,因此我们正在分析是否可以使用CDI来代替Spring。我们可以说CDI可以替代Spring吗? 最佳答案 2021年更新:我回答最初的问题已经10年了,但我仍然偶尔获得支持。我能否请future的读者接受我的回答:2011年Java企业版图
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭去年。Improvethisquestion我们计划从头开始编写一个Web应用程序,已决定使用符合JavaEE6标准的最新版Glassfish,因此我们正在分析是否可以使用CDI来代替Spring。我们可以说CDI可以替代Spring吗? 最佳答案 2021年更新:我回答最初的问题已经10年了,但我仍然偶尔获得支持。我能否请future的读者接受我的回答:2011年Java企业版图
我的配置是:Wildfly8.2.0,Weld是否可以在Bean中注入(inject)而不是在CDI的接口(interface)中注入(inject)?@StatelessclassBeanimplementsIBean{...}interfaceIBean{...}@SessionScopedclassScoped{@InjectBeanbean;//Fail@InjectIBeaniBean;//OK}编辑:更多信息在我之前的问题中:StatelessEJBimplementsinterfaceinjectionfailed 最佳答案
我在SO上找不到任何合理的答案,所以我希望它不是重复的。那么为什么我应该更喜欢setter或构造函数注入(inject)而不是简单的@InjectMyBeanbean;如果你需要在类初始化期间对注入(inject)的bean做一些事情,我会得到构造函数注入(inject)的用法,比如publicvoidMyBean(@InjectOtherBeanbean){doSomeInit(bean);//Idon'tneedtouse@PostConstructnow}但是,它和@PostConstruct方法几乎一样,我根本没有得到setter注入(inject),这不就是Spring和其他
我想做这样的事情:@StatelesspublicclassGreeterEjb{privatefinalGreetergreeter;@InjectpublicGreeterEjb(Greetergreeter){this.greeter=greeter;}publicStringgreet(){returngreeter.greet();}}我在Glassfish3.1.1和JBoss7.0.2上试过,结果好坏参半。在某些情况下它起作用,在其他情况下它不起作用。参见thisthreadintheGlassfischforum如果您对细节感兴趣。EJB3.1spec,第4.9.2Be
我有点困惑,我们将CDIbean称为我们使用@Inject注释注入(inject)它们的bean或我们在其中使用@Inject的bean? 最佳答案 CDIbeansareclassesthatCDIcaninstantiate,manage,andinjectautomaticallytosatisfythedependenciesofotherobjects.AlmostanyJavaclasscanbemanagedandinjectedbyCDI.例如,PrintServlet依赖于Message实例,并由CDI运行时自动注
我正在开发一个应用程序,我已经开始使用CDI以及JSF和JPA。Web容器是Tomcat。我对CDIbean中的EntityManager生命周期感到非常困惑,我需要一个好的建议来清除我脑海中的一些东西。一般来说,我读到的是EntityManager应该主要在JavaEE容器中使用,使用PersistenceContext注释注入(inject)它。所以容器会关心它的生命。但是,如果你不使用JavaEE容器(作为Tomcat),那么我需要管理我的EntityManager的生活。现在我最好的选择是什么,使用Tomcat、CDI、JSF和JPA?我现在正在做的事情如下:publiccla
JavaEE7由一堆“bean”定义组成:托管Beans1.0(JSR-316/JSR-250)Java1.0(JSR-330)的依赖注入(inject)CDI1.1(JSR-346)JSF托管Bean2.2(JSR-344)EJB3.2(JSR-345)为了摆脱脑海中的困惑,我研究了几篇“什么时候使用哪种bean类型”的文章。EJB的优点之一似乎是它们单独支持声明性容器管理事务(著名的事务注释)。不过,我不确定这是否正确。有人可以批准吗?与此同时,我想出了一个简单的演示应用程序来检查这是否真的是真的。我刚刚基于this定义了一个CDIbean(不是一个EJB-它没有类级别注释),如下