[英]Can CDI inject standard library POJOs into an EJB?
我可以将自己的POJO注入到这样的托管对象中:
import javax.ejb.Stateless;
import javax.inject.Inject;
@Stateless
public class SomeEjb {
@Inject
private SomePojo somePojo;
}
我有这个POJO:
// No annotations
public class SomePojo {
}
这很好用。 如果我将EJB注入JSF支持bean,我可以看到somePojo
的值是非null值,如预期的那样。
但是,如果我尝试将java.util.Date
注入SomeEjb
,我在部署时会遇到以下异常:
Severe: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311)
SomeEjb现在:
// No annotations
public class SomeEjb {
@Inject
private Date date;
}
Date有一个公共的,无参数的构造函数,我认为所有CDI都需要“满足依赖”。 我确信这种行为是“规范”,但显然我对CDI的理解存在很大漏洞。
有人可以解释为什么这不起作用? 从CDI角度看SomePojo
和java.util.Date
有什么区别?
语境:
new Date()
。 我也可以使用EAP 6.3重现这一点。
问题最有可能是因为使用Java EE 6. java.util.Date位于rt.jar中,并且此JAR不包含将启用CDI的beans.xml文件。 您只能从包含beans.xml的JAR中注入对象。
常见的解决方法是使用生产者方法来注入此类对象。 你必须亲自对这个生产者进行研究,但是你可以从任意类中注入对象,而不管它们属于哪个JAR。
据我所知,Java EE 7中的行为发生了变化,其中beans.xml在某些情况下是可选的: https : //blogs.oracle.com/theaquarium/entry/default_cdi_enablement_in_java
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.