我试图在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,如果这一点很重要的话。
答案 0 :(得分:28)
在Java EE 7中,JAR / WAR的默认扫描是annotated
,这意味着如果您没有指定扫描模式的beans.xml
,它将默认为基于注释的扫描。
你的班级GreeterImpl
没有定义注释的bean - 特别是没有范围。您可以通过添加beans.xml
或将@Dependent
(或其他范围)添加到GreeterImpl