MyHow для внедрения bean-компонента с помощью конструктора и вызова метода в Springboot - PullRequest
0 голосов
/ 23 апреля 2020
@Service
abstract class A {
  protected MyObj obj;
  protected A(MyObj obj) {
    this.obj = obj;
  }
  public abstract XYZ getTrade();
}

@Service
public class B extends A {
   B(MyObj obj) {
     super(obj);
   }

   public XYZ getTrade() {} 
}

@Service
public class C extends A {
   C(MyObj obj) {
     super(obj);
   }

   public XYZ getTrade() {} 
}

@Controller
public class MyController {

  @GemMapping("/test")
  public void test() {
    MyObj obj = new MyObj();
    if(condition 1) {
       //call getTrade() method of class B
    }
    if(condition 2) {
       //call getTrade() method of class C
    }
  }
}

MyObj - это определенный пользователем POJO, который не является управляемым компонентом. У меня есть вышеупомянутые классы. теперь я должен вызвать метод getTrade (), основанный на каком-то условии в Controller. Не могли бы вы помочь / посоветовать?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Если вы хотите достичь полиформизма на своих сервисах, вам нужно добавить квалификатор в ваши классы B и C. Таким образом, теперь встал вопрос, как динамически внедрить службу во время выполнения, и на этот вопрос есть ответ: Как динамически внедрить службу, используя переменную «квалификатора» времени выполнения?

0 голосов
/ 23 апреля 2020

этот ответ основан на информации, предоставленной в вопросе.

, чтобы ввести бины, которые вы можете сделать:

@Controller
public class MyController {
  private final B b;
  private final C c;

  public MyController (B b, C c) {
    this.b = b;
    this.c = c;
  }
  .........
}

в этом случае бины должны иметь один аргумент без аргументов конструктор. Итак, в вашем случае вы можете использовать конструктор без аргументов в каждом сервисе. затем установите myObj с помощью сеттера. это сделает свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...