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

时间:2014-12-30 13:06:53

标签: java-ee cdi code-injection

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

Unsatisfied dependencies for type Greeter with qualifiers @Default

我尝试使用GreeterImpl注释@Default和注入点,但这也不起作用。我在这里错过了什么吗?

我的Greeter界面:

public interface Greeter {
    public void sayHi();
}

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

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

    @Override
    public void sayHi() {
        LOGGER.info("Hi!");
    }
}

我的ScheduledGreeter EJB:

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

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

我在这里错过了一些关于CDI的事吗?我需要beans.xml META-INF才能使其正常工作吗?

修改: 我将此作为war部署到Wildfly,如果这一点很重要的话。

1 个答案:

答案 0 :(得分:28)

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

你的班级GreeterImpl没有定义注释的bean - 特别是没有范围。您可以通过添加beans.xml或将@Dependent(或其他范围)添加到GreeterImpl

来覆盖此设置