我想在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)
我错过了什么?我忘了什么吗?
答案 0 :(得分:0)
甚至几年后,我在与Arquillian进行测试时遇到了同样的问题。在Arquillian中,(通常)仅包括测试所需的类。在我的情况下,CDI资源生产者被保存在称为资源的单个类中。我发现还必须包括Resources.class引用的所有类。否则,您会收到此问题的错误消息。一旦知道就可能很明显。
主要问题:不幸的是,必须存在根本无法传播到控制台的根本原因(ClassNotFound或其他原因)。