嘿那里,
我对 Java EE 和 CDI 非常陌生。我尝试建立一个测试项目,以便使用 JAX-RS 和 CDI 完成我的第一步。我通过提供 beans.xml 启用了 CDI。只要我在测试,我就会使用 bean-discovery-mode="all" 元素。CDI 似乎工作正常,因为我可以成功地将 BeanManager 注入到我的测试资源中,并且可以输出它发现的所有 bean。
我尝试注入一个生产者方法提供的类。Netbeans 向我显示了有关 provideMe 字段的警告: 未找到符合注入条件的已启用 bean
当我将应用程序部署到 Glassfish 时,我得到了焊接异常:
WELD-001408 Unsatisfied dependencies for type [ProvideMeInterface] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private com.test.rest.DataImport.provideMe]
这是我为这个小测试准备的课程:
界面:
package com.test.orm;
public interface ProvideMeInterface
{
int getCount();
}
执行:
package com.test.orm;
public class ProvideMeImpl implements ProvideMeInterface {
int cnt;
ProvideMeImpl(int cnt)
{
this.cnt = cnt;
}
@Override
public int getCount() {
return cnt;
}
}
制片人:
package com.test.orm;
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.Produces;
public class ProvideMeProvider {
@Produces
@ApplicationScoped
public ProvideMeInterface produceFactory() {
return new ProvideMeImpl(111);
}
}
资源:
package com.test.rest;
import ...
...
@Path("rest/import")
public class DataImport {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Inject
private ProvideMeInterface provideMe;
@Inject
BeanManager beanManager;
public DataImport() {}
@GET
@Produces("text/html")
public String getHtml() {
return "<html><body><h1>IMPORT Resource: " + provideMe.getCount() + " </body></h1></html>";
}
}
当我在没有“ProvideMe”测试的情况下启动应用程序并打印出所有发现的 bean 时,发现了 ProvideMeProvider 类,以及“ProvideMe”:
...
INFO: 2014-07-14 14:09:31,040 [DEBUG] com.test.rest.DataImport - Bean: com.test.orm.ProvideMeProvider
INFO: 2014-07-14 14:09:31,041 [DEBUG] com.test.rest.DataImport - Bean: com.test.orm.ProvideMe
...
问题:
1) 为什么在尝试注入接口的唯一实现时会出现“不满足的依赖项..”错误?
2)这里发现了所有必要的类吗?
3)如果没有,我需要做什么才能被发现?
4) 它发现的“ProvideMe”类是什么?(我有 ProvideMeImpl、ProvideMeInterface 和 ProvideMeProvider,但没有类 ProvideMe)
我正在使用:Glassfish 4.0 (build 89) (Java EE 7 Web)/NetBeans 8.0/maven 3.2.1/JDK 1.7