Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MyHow如何在springboot中使用构造函数和调用方法注入bean_Spring_Spring Boot - Fatal编程技术网

MyHow如何在springboot中使用构造函数和调用方法注入bean

MyHow如何在springboot中使用构造函数和调用方法注入bean,spring,spring-boot,Spring,Spring Boot,MyObj是一个非托管bean的用户定义POJO。 我有上述课程。现在我必须根据控制器中的某些条件调用getTrade()方法。你能帮我一下吗 此答案基于问题提供的信息 要注入bean,您可以执行以下操作: @Service abstract class A { protected MyObj obj; protected A(MyObj obj) { this.obj = obj; } public abstract XYZ getTrade(); } @Servic

MyObj
是一个非托管bean的用户定义POJO。
我有上述课程。现在我必须根据控制器中的某些条件调用getTrade()方法。你能帮我一下吗

此答案基于问题提供的信息

要注入bean,您可以执行以下操作:

@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
    }
  }
}

在这种情况下,bean必须有一个无参数构造函数。因此,在您的情况下,您可以做的是在每个服务中都有一个无参数构造函数。然后用setter设置你的myObj。这就可以了。

如果你想在你的服务中实现多形性,你需要在你的类
B
C
中添加一个限定符。因此,现在的问题是如何在运行时动态注入服务,这里给出了答案:

您的问题缺少信息。例如,要将哪个服务注入控制器。你的控制器代码。什么是MyObj?它是组件、配置还是Bean?请解决你的问题嗨,Shoshi。我补充了一些细节。谢谢你的回复。这里B和C只是一个例子。我将有100个这样的类,它们将扩展类A。在这里,我试图实现多态性。在基类中,我将有公共方法,然后在子类中,我将有特定的方法。您将有100个服务?你到底想做什么?我必须分析100种类型的交易,这样你就可以只使用一种服务。在该服务中,您可以使用其他类或方法解析您的100笔交易。我想你不需要为此创建100服务。谢谢,罗伯特。我将尝试这个解决方案
@Controller
public class MyController {
  private final B b;
  private final C c;

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