在我的应用程序中,我有几个使用服务的 bean。这些服务使用 @Named("Name")
进行注释,并使用 @Inject
进行注入(inject)。
我有一项服务。我有一个接口(interface)和它的实现。 在我的应用程序的另一个模块中,我可以通过多种方式使用此服务,但某些方法需要不同,并且我需要新的方法。所以我想用另一个服务来扩展第一个服务。
我想出了这样的东西:
Interface Service1 {...}
@Named(Service1)
Class Service1Impl implements Service1 {...}
Interface SpecialService1 extends Service1 {...}
@Named(SpecialService1)
Class SpecialService1 extends Service1Impl implements SpecialService1 {...}
当然,当我启动服务器时,我收到一条消息,指出没有 Service1
类型的合格 bean,因为有两个匹配的实现 Service1 的类。
但是我需要扩展 SpecialService1
中的 Service1
来访问所有方法,并且我需要扩展 SpecialService1Impl
中的 Service1Impl
,这样我就不必再次实现所有内容。
在我的 bean 中,我只想注入(inject) SpecialService1
并访问 Service1
和 SpecialService1
的所有方法。
你知道我如何才能让这样的构造发挥作用吗?
最佳答案
一位同事给了我一个建议,我让它发挥作用。
在我想要注入(inject)一项服务的任何地方,我都必须添加 @Qualifier("Service1")
。这样他就知道要注入(inject)哪个服务。
对此您有更优雅的解决方案吗?否则我会接受这个作为问题的答案。
编辑:如上面的评论所述,我还对 Service1 使用了 @Primary
。这样我只需要用 @Qualifier
关于Javax : Extending named service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976952/