注入slf4j Logger:类型Logger的不满足依赖关系,带有限定符@Default

时间:2016-07-11 09:00:44

标签: java logging dependency-injection slf4j

我想在WildFly 10上运行的maven动态Web项目中将一个Logger注入一个bean。

我在POM中添加了依赖项。范围在WildFly中提供:

    <!-- Logger -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.2</version>
        <scope>provided</scope>
    </dependency>

我创建了一个制作人:

import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Singleton;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Singleton
public class LoggerProducer {

    @Produces
    Logger createLogger(final InjectionPoint ip) {
        return LoggerFactory.getLogger(ip.getMember().getDeclaringClass());
    }
}

然后我尝试注入一个Logger:

@Inject
private Logger log;

此时我已收到警告:

没有豆有资格注射到注射点[JSR-346§5.2.2]

当我尝试使用它时,我收到了这个错误:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Logger with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private init.StartupBean.log
  at init.StartupBean.log(StartupBean.java:0)

我错过了什么?我忘了什么吗?

1 个答案:

答案 0 :(得分:0)

甚至几年后,我在与Arquillian进行测试时遇到了同样的问题。在Arquillian中,(通常)仅包括测试所需的类。在我的情况下,CDI资源生产者被保存在称为资源的单个类中。我发现还必须包括Resources.class引用的所有类。否则,您会收到此问题的错误消息。一旦知道就可能很明显。

主要问题:不幸的是,必须存在根本无法传播到控制台的根本原因(ClassNotFound或其他原因)。