在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....
型
我不明白为什么如果我不实现任何接口它的工作,但只要我添加实现B它就不再是!没有找到任何有关的文档:(
谢谢!
1条答案
按热度按时间uqxowvwt1#
它看起来像是在声明一个单例会话EJB。
默认情况下,一个没有实现接口也没有以其他方式定义任何视图的会话bean类有一个无接口视图,因此其他类可以直接使用它的类注入它:
如果bean不公开任何其他客户端视图(本地、远程、无接口、2.x远程主目录、2.x本地主目录、Web服务),并且其implements子句为空,则bean定义无接口视图。
规格4.9.8
然而,如果会话bean实现了一个接口,那么除非你使用注解来显式定义bean的业务接口,否则它实现的所有接口都被视为业务接口,它不会获得无接口视图。在这种情况下,它不能直接使用它的类注入。
[If business接口不是显式指定的,并且]如果bean类使用Local注解进行注解,或者如果bean类既没有使用Local注解也没有使用Remote注解,则所有实现的接口(不包括上面列出的接口)都被假定为bean的本地业务接口。
规格4.9.7
您应该使用EJB的接口(即
@Inject private B someB;
)注入EJB,或者通过将@LocalBean
添加到A
来显式声明EJB具有无接口视图。(在这种情况下,您可能还希望使用@Local
来说明哪些其他实现的接口是业务接口)。