Javax : Extending named service

标签 java spring

在我的应用程序中,我有几个使用服务的 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 并访问 Service1SpecialService1 的所有方法。

你知道我如何才能让这样的构造发挥作用吗?

最佳答案

一位同事给了我一个建议,我让它发挥作用。

在我想要注入(inject)一项服务的任何地方,我都必须添加 @Qualifier("Service1")。这样他就知道要注入(inject)哪个服务。

对此您有更优雅的解决方案吗?否则我会接受这个作为问题的答案。

编辑:如上面的评论所述,我还对 Service1 使用了 @Primary。这样我只需要用 @Qualifier

标记 SpecialService1 的注入(inject)

关于Javax : Extending named service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976952/

相关文章:

java - 如何处理 Spring 表达式语言中的列表列表

java.lang.IllegalStateException : No thread-bound request found, 方面的异常

html - 在 Thymeleaf 中创建下拉菜单和表单

java - Spring Cloud 流卡夫卡流DLQ

java - 使用 JAX-RS Resteasy 和 ContainerRequestFilter/ContainerResponseFilter 记录请求

java - 如何在 Java 中获取程序窗口的 x 和 y?

java - Java 困惑突变测试框架可能出现的类加载器问题

java - 在 Spring 中向客户端发送字段元数据

spring - 在 Spring 中结合 GET 和 POST 请求方法

Spring Batch 将值列表作为参数传递