我使用 Java WebSocket API 来声明客户端(@ClientEndpoint 注释的 Java 类):
@ClientEndpoint
public class MySock {
MySock(ExecutorService exec){}
...
}
实例是通过构造函数创建的:
webSocket = new MySock(exec);
session = wsContainer.connectToServer(webSocket, url);
我在通过 quarkus-maven-plugin 构建过程中遇到错误:
[error]: Build step ...ArcProcessor#validate threw an exception:
javax.enterprise.inject.UnsatisfiedResolutionException:
Unsatisfied dependency for type ...ExecutorService and qualifiers [@Default]
- java member: edu.MySock#<init>()
- declared on CLASS bean [types=[edu.MySock, java.lang.Object], qualifiers=[@Default, @Any], target=edu.MySock]
注意:没有@Inject 注解
如果它可以作为类和实例传递给#connectToServer,是否应该对其进行验证?
那么,如果验证处理一个悲观的案例,验证是有用的,但它打破了一个乐观的案例,是否可以?
悲观的情况,可能不声明依赖项:
session = wsContainer.connectToServer(MySock.class, url);
在以下情况下,验证是有害的,因为它破坏了构建阶段:
session = wsContainer.connectToServer(webSocket, url);
也许 ClientEndpoint 根本不应该被验证?
在你问我之前......我们不会向 WebSocket 注入一些东西,我们也不想使用编程端点。但是我们想为带注释的类创建一个实例。为什么不?WebSocket 将复杂的逻辑封装在自身内部,并且我们多次使用这个变体(例如在 WildFly 上的应用程序中)。
对我来说最好的解决方案是只禁用对我的 bean 的验证,但我不知道如何去做。
这篇文章对我没有帮助https://quarkus.io/guides/cdi-reference。beans.xml 被忽略的事实也对我没有帮助。
对于未来,第二种方法是在没有一个类成员带有 @Inject 注释的情况下禁用验证。它可能不正确,但这里有一些解释:
首先,容器调用 bean 构造函数(默认构造函数或注解 @Inject 的构造函数),以获取 bean 的实例。
所以,我的构造函数不是“默认”的,我没有使用 @Inject 注释。