使用生产者方法的Java EE产生'WELD-001408不满意的依赖...'异常

use*_*334 5 netbeans glassfish java-ee cdi weld2

那里,

我对Java EE和CDI非常新鲜.我尝试设置一个测试项目,以便使用JAX-RS和CDI完成我的第一步.我通过提供beans.xml来启用CDI.只要我测试,我就使用bean-discovery-mode ="all"元素.CDI似乎工作正常,因为我可以成功地将BeanManager注入我的测试资源,并且我可以输出它发现的所有bean.

我尝试注入一个由producer方法提供的类.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]
Run Code Online (Sandbox Code Playgroud)

这是我的这个小测试的类:

接口:

package com.test.orm;
public interface ProvideMeInterface
{
    int getCount();
}
Run Code Online (Sandbox Code Playgroud)

执行:

package com.test.orm;
public class ProvideMeImpl implements ProvideMeInterface {

    int cnt;
    ProvideMeImpl(int cnt)
    {
        this.cnt = cnt;
    }

    @Override
    public int getCount() {
        return cnt;
    }
}
Run Code Online (Sandbox Code Playgroud)

制片人:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

资源:

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>";
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在没有"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
...
Run Code Online (Sandbox Code Playgroud)

问题:

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

A. *_*das 10

您正在@Producesjavax.ws.rs(由JAX-RS运行时使用)导入,而不是从javax.enterprise.inject.