Javax:扩展命名服务

Javax:扩展命名服务,java,spring,Java,Spring,在我的应用程序中,我有几个使用服务的bean。这些服务使用@命名(“名称”)进行注释,并使用@Inject进行注入 我有服务。我有一个接口和实现。 在我的应用程序的另一个模块中,我可以以多种方式使用此服务,但有些方法需要不同,我需要新的方法。所以我想用另一个扩展第一个服务 我想出了这样的办法: Interface Service1 {...} @Named(Service1) Class Service1Impl implements Service1 {...} Interface Spe

在我的应用程序中,我有几个使用服务的bean。这些服务使用
@命名(“名称”)
进行注释,并使用
@Inject
进行注入

我有服务。我有一个接口和实现。 在我的应用程序的另一个模块中,我可以以多种方式使用此服务,但有些方法需要不同,我需要新的方法。所以我想用另一个扩展第一个服务

我想出了这样的办法:

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中,我只想注入
SpecialService1
并访问
Service1
SpecialService1
的所有方法


你知道我怎样才能让这样一个结构起作用吗?

一位同事给了我一个建议,我让它起作用了

在我想要注入其中一个服务的任何地方,我都必须添加
@Qualifier(“Service1”)
。这样他就知道应该注入哪个服务

你有更优雅的解决方案吗?否则我会接受这个问题的答案


编辑:如上面的评论所述,我还为服务1使用了
@Primary
。这样,我只需用
@Qualifier

标记注入SpecialService 1,一位同事给了我一个提示,我让它开始工作

在我想要注入其中一个服务的任何地方,我都必须添加
@Qualifier(“Service1”)
。这样他就知道应该注入哪个服务

你有更优雅的解决方案吗?否则我会接受这个问题的答案


编辑:如上面的评论所述,我还为服务1使用了
@Primary
。那样的话,我只需要用
@Qualifier

标记注入SpecialService1,如果你的bean既是
Service1
又是
SpecialService1
,你只需要注册
SpecialService1
,而不需要注册另一个。我真的不明白你的意思。在其他bean中,我只需要注入Service1。在另一个Bean中,我需要特殊服务1。我只在每个豆子里注射一种。但我必须把@Named放在这两个服务上面,才能注入其中一个。不,你不能。。。您的
SpecialService1
也是
Service1
。。。因此,您只需要一个
SpecialService1
的实例就可以完成这两个角色。。。如果您确实需要两个实例,则需要使用
@限定符来区分它们。。。您可能希望将您的
@Service1
标记为
@Primary
,以便在默认情况下使用,而另一个是选择性注入的。是的,我需要能够以不同的方式使用它们。在我的应用程序的某些区域,我需要Service1,因为我想使用原始方法,而在一个区域,我需要覆盖的版本,所以我需要SpecialService1。但是@Primary注释可以很好地工作。这样我只需要标记特殊服务。谢谢。如果你的bean同时是
Service1
SpecialService1
,你只需要注册
SpecialService1
,而不需要注册另一个。我真的不明白你的意思。在其他bean中,我只需要注入Service1。在另一个Bean中,我需要特殊服务1。我只在每个豆子里注射一种。但我必须把@Named放在这两个服务上面,才能注入其中一个。不,你不能。。。您的
SpecialService1
也是
Service1
。。。因此,您只需要一个
SpecialService1
的实例就可以完成这两个角色。。。如果您确实需要两个实例,则需要使用
@限定符来区分它们。。。您可能希望将您的
@Service1
标记为
@Primary
,以便在默认情况下使用,而另一个是选择性注入的。是的,我需要能够以不同的方式使用它们。在我的应用程序的某些区域,我需要Service1,因为我想使用原始方法,而在一个区域,我需要覆盖的版本,所以我需要SpecialService1。但是@Primary注释可以很好地工作。这样我只需要标记特殊服务。谢谢