添加接口实现后容器管理的无状态 bean 的依赖性不满足
Unsatisfied dependency for container managed Stateless bean after adding interface implementation
我有一些处理器 classes 没有实现任何接口:
public class Processor1 {
}
@Stateles
public class Processor2 {
}
public class Processor3 {
}
其中之一是容器管理的无状态 bean。
服务 class 已注入所有处理器:
public class MyService {
@Inject private Processor1 p1;
@Inject private Processor2 p2;
@Inject private Processor3 p3;
}
我要求所有处理器都应该实现接口 ProcessorInterfase;
我更改代码后,部署失败并出现错误:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Processor2 with qualifiers @Default
好的。我创建了一个新的 Qualifier @Process2Bean 并将其添加到 Processor2 声明中:
@Stateles
@Process2Bean
public class Processor2 {
}
注入点:
public class MyService {
@Inject private Processor1 p1;
@Inject @Process2Bean private Processor2 p2;
@Inject private Processor3 p3;
}
现在我有以下部署错误:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Processor2 with qualifiers @Process2Bean
at injection point [UnbackedAnnotatedField] @Inject @Process2Bean private a.b.c.MyService.p2
我是不是做错了什么?
谢谢。
这看起来像是我在 中回答的问题的转折。
简而言之,当你注入EJB bean时,你需要根据它们的客户端可见部分——接口来注入它们。当然,除非您像原始场景一样没有界面视图。 CDI spec 如果你想读一读,涵盖这个内容。
您将不得不通过 ProcessorInterfase
注入 Processor2
。但是存在三个实现,因此这会导致不明确的依赖关系,因此您还需要限定符。最终解决方案可能如下所示:
@Inject
@Process2Bean
ProcessorInterfase processor2;
我有一些处理器 classes 没有实现任何接口:
public class Processor1 {
}
@Stateles
public class Processor2 {
}
public class Processor3 {
}
其中之一是容器管理的无状态 bean。
服务 class 已注入所有处理器:
public class MyService {
@Inject private Processor1 p1;
@Inject private Processor2 p2;
@Inject private Processor3 p3;
}
我要求所有处理器都应该实现接口 ProcessorInterfase;
我更改代码后,部署失败并出现错误:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Processor2 with qualifiers @Default
好的。我创建了一个新的 Qualifier @Process2Bean 并将其添加到 Processor2 声明中:
@Stateles
@Process2Bean
public class Processor2 {
}
注入点:
public class MyService {
@Inject private Processor1 p1;
@Inject @Process2Bean private Processor2 p2;
@Inject private Processor3 p3;
}
现在我有以下部署错误:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Processor2 with qualifiers @Process2Bean
at injection point [UnbackedAnnotatedField] @Inject @Process2Bean private a.b.c.MyService.p2
我是不是做错了什么? 谢谢。
这看起来像是我在
简而言之,当你注入EJB bean时,你需要根据它们的客户端可见部分——接口来注入它们。当然,除非您像原始场景一样没有界面视图。 CDI spec 如果你想读一读,涵盖这个内容。
您将不得不通过 ProcessorInterfase
注入 Processor2
。但是存在三个实现,因此这会导致不明确的依赖关系,因此您还需要限定符。最终解决方案可能如下所示:
@Inject
@Process2Bean
ProcessorInterfase processor2;