带有限定符 @Default 的类型 X 的不满足依赖关系

Posted

技术标签:

【中文标题】带有限定符 @Default 的类型 X 的不满足依赖关系【英文标题】:Unsatisfied dependencies for type X with qualifiers @Default 【发布时间】:2015-02-26 15:44:32 【问题描述】:

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

Unsatisfied dependencies for type Greeter with qualifiers @Default

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

我的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!");
    

我的ScheduledGreeterEJB:

@Stateless
public class ScheduledGreeter 
    @Inject
    private Greeter greeter;

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

我在这里遗漏了一些关于 CDI 的内容吗?我需要beans.xmlMETA-INF 才能使这个工作吗?

编辑: 我将其作为 war 部署到 Wildfly,如果这很重要的话。

【问题讨论】:

【参考方案1】:

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

您的课程GreeterImpl 上没有定义bean 的注释——特别是没有作用域。您可以通过添加beans.xml 或将@Dependent(或其他范围)添加到您的GreeterImpl 来覆盖它

【讨论】:

该规范也可能对您有用 - docs.jboss.org/cdi/spec/1.2/…

以上是关于带有限定符 @Default 的类型 X 的不满足依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

带有限定标识符的 where 子句中的不明确列

精通C语言ANSI C 类型限定符const,volatile,restrict,_Atomic

精通C语言ANSI C 类型限定符const,volatile,restrict,_Atomic

类型限定符volatile

函数名称后不久的 const 类型限定符[重复]

const 不兼容的类型限定符问题