对于带有限定符@Default的类型X的不满意依赖项

Mar*_*tin 14 code-injection java-ee cdi

我正在尝试Greeter在Wildfly 8.2内部运行的EJB上注入给定类型()的对象.但是,部署始终会失败并显示消息

Unsatisfied dependencies for type Greeter with qualifiers @Default
Run Code Online (Sandbox Code Playgroud)

我试图用注释GreeterImpl和注入点注释,@Default但这也没有用.我在这里错过了什么吗?

我的Greeter界面:

public interface Greeter {
    public void sayHi();
}
Run Code Online (Sandbox Code Playgroud)

我的GreeterImpl班级(唯一实施的班级Greeter):

public class GreeterImpl implements Greeter {
    private static final Logger LOGGER = LoggerFactory.getLogger(GreeterImpl.class);

    @Override
    public void sayHi() {
        LOGGER.info("Hi!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ScheduledGreeterEJB:

@Stateless
public class ScheduledGreeter {
    @Inject
    private Greeter greeter;

    @Schedule(second = "*/15", minute = "*", hour = "*")
    public void sayHi() {
        greeter.sayHi();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了一些关于CDI的事吗?我需要一个beans.xmlat META-INF来实现吗?

编辑: 我正在将它部署为warWildfly,如果这甚至很重要的话.

Joh*_*ent 29

在Java EE 7中,JAR/WAR的默认扫描是annotated,如果您没有beans.xml指定扫描模式,则默认为基于注释的扫描.

你的类,GreeterImpl没有bean定义注释 - 特别是没有范围.您可以通过添加beans.xml或添加@Dependent(或其他范围)来覆盖它GreeterImpl

  • 该规范也可能对您有用 - http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#default_bean_discovery (2认同)