在OpenLiberty、Java 8上,使用类

@Singleton(name = "AppContext")
@Startup
public class A implement B{
...
}


@ApplicationScoped
public class C{

    @Inject
    private A someA;

}

我得到了一个

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type A with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedMethod] @Inject public someA....

我不明白为什么如果我dont implement any interface its working,但只要我add implement B it is not anymore!没有找到任何关于这方面的文档:(

谢谢!

推荐答案

它看起来像是在声明一个单例会话EJB.

默认情况下,一个没有实现接口也没有以其他方式定义任何视图的会话bean类有一个无接口视图,因此其他类可以直接使用它的类注入它:

如果该Bean没有公开任何其他客户机视图(本地、远程、无接口、2.x远程Home、2.x本地Home、Web服务),并且其Implementes子句为空,则该Bean定义一个无接口视图.

Spec 4.9.8

但是,如果会话Bean实现了一个接口,那么除非您使用注释来显式定义该Bean的业务接口,否则它实现的所有接口都将被视为业务接口,并且它不会获得无接口视图.在这种情况下,不能使用它的类直接注入它.

[如果没有明确指定业务接口,并且]如果Bean类使用Local批注进行了批注,或者如果Bean类既没有使用Local批注也没有使用Remote批注进行批注,则Bean的all implemented interfaces (excluding the interfaces listed above) are assumed to be local business个接口.

Spec 4.9.7

您应该使用其接口(即@Inject private B someB;)注入EJB,或者通过将@LocalBean添加到A来显式声明该EJB具有无接口视图.(在这种情况下,您可能还想使用@Local来说明哪些其他实现的接口是业务接口).

Java相关问答推荐

Maven Google Sheets版本问题

当我用OkHttpClient重写shouldInterceptRequest来发布数据时,Android WebView正在以纯HTML加载URL内容

有关手动创建的包的问题

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

在Java中,如何按一个属性升序,然后按另一个属性降序对对象列表进行排序?

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

无法使用Java&;TestContainers获取AWS SQS队列的属性

如何对多个字段进行分组和排序?

Arrays.hashcode(int[])为不同的元素提供相同的散列

使用OAuth 2.0资源服务器JWT时的授权(授权)问题

如何用内置Java从JavaFX应用程序中生成.exe文件?

如何通过Java java.lang.Foreign API访问本机字节数组

将BlockingQueue+守护程序线程替换为执行器

使用同步方法中的新线程调用同步方法

如何使用jOOQ在PostgreSQL中从枚举类型生成Java枚举

如何在MPAndroidChart中的条形图上正确添加标签

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

java.lang.ClassCastException:com.google.firebase.FirebaseException无法转换为com.google.fire base.auth.FirebaseAuthException

MapStruct记录到记录的映射不起作用

具有 DayOfWeek 列表的 JPA 实体