【发布时间】:2015-04-22 19:10:15
【问题描述】:
我可以将自己的 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 backing-bean 中,我可以看到 somePojo 的值是非空值,正如预期的那样。
但是,如果我尝试将 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 有什么区别?
上下文:
- Java EE 6
- GlassFish 3.1.2.2
- 我没有这方面的用例。我知道我可以指定
new Date()。
【问题讨论】: