java - 通过 Java 中的依赖注入(inject)进行继承(后期绑定(bind))

标签 java spring inheritance soa late-binding

我正在使用 Spring DI 连接我的组件,但遇到了这个问题。

我有一个具有多个实现的 BaseService 类。它上面的层有一个构建器,它调用服务来获取数据以填充 POJO。我需要调用的服务实现(ServiceA,ServiceB)根据我需要构建的POJO的类型进行更改。

在这种情况下,如何 Autowiring 服务,因为它需要后期绑定(bind)服务。我该如何应对这种情况? (Spring DI 中的示例真的很有帮助)

Builder calling Services

我阅读了类似的问题,但找不到答案。而且我读到 SOA 模式(例如 Service Host)为确切的用例提供了不同的解决方案。

请帮忙。 谢谢

最佳答案

使用 FactoryBean 怎么样? :

public class BuilderFactory implements FactoryBean<Builder> {

  @Autowired
  private ApplicationContext appContext;

  ...

  @Override
  public Builder getObject() {
      Builder builder = new Builder();      
      switch(something()) { 
         case "foo":
             builder.service = new ServiceA(); 
             break;
         case "bar":
             builder.service= new ServiceB();
             break;
         ...
         default:
             //handle cases where it's unclear which type to create

         }
     return builder;
  }

}

其中 Builder 实例有一个公共(public)/包私有(private)字段 BaseService 服务,该字段在其 getData()buildPojos 中被调用() 以及其他任何方法。

(如果你希望这个字段是私有(private)的,你也可以使用静态工厂方法来实例化 Builder)

关于java - 通过 Java 中的依赖注入(inject)进行继承(后期绑定(bind)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976797/

相关文章:

c++ - 需要帮助在基本 C++ 攻击游戏中实现健康

java - MessageFormat 未按预期工作

java - 有关可插入Java框架的设计问题

java - 将 joda 时区映射到 windows 时区(例如在 C# 中)

java - SpringBatch itemReader 使用大量内存

spring - 如何使用 Spring 将值注入(inject) Wicket 口页面?

c++ - 多个派生类调用基类成员函数

java - 在 ReentrantReadWriteLock 中是否有 WriteLock 优先于 ReadLock

json - 415 Spring 3.2 不支持的媒体类型

当其中一个字段固定时的java继承