如何使用 DI 框架动态创建 bean

How to create beans dynamically using a DI framework

要求是这样的:用户输入的是单个字符后面跟一个整数数组,比如'A 1 2'、'B 3 4 5'、'C 1'等。单个字符表示class 来构造,整数是该构造函数的输入参数。请注意,不同的 classes 可能需要不同数量的整数。

然后我们需要编写一个程序来解析用户输入并相应地创建对象。

我的方法是使用正则表达式进行解析和硬编码class来调用。

但另一位高级开发人员表示,更好的想法是使用依赖注入根据用户输入自动创建对象。他给出了另一个提示来创建一个接口并使用 spring 框架依赖注入(而不是 spring 引导)。

我仍然对如何以这种方式动态创建 bean 感到困惑。有人可以帮忙吗?

您可以为可以创建的 类 创建一个公共接口,以及一个转换输入的 Factory bean。

// common interface
interface MyObject {
  void someMethod();
}
class A implements MyObject {
  public A(List<Integer> params) { ... }
}
class B implements MyObject {
  public B(List<Integer> params) { ... }
}

// parsed data
class Input {
 char character;
 List<Integer> ints;
 // getters, setters
}
interface MyObjectFactory {
  public MyObject apply(Input input);
}

@Bean
class MyObjectFactory implements MyObjectFactory {
  public MyObject apply(Input input) {
    // create object from input, eg switch over input.getCharacter()
  };
}
// injected
class MyClientService {
 @Autowired
 MyObjectFactory objectFactory;

 public void doStuff() {
   List<Input> parsedInputs = parse(something);
   for (Input input : parsedInputs) {
     MyObject object = objectFactory.apply(input);
     // ...
   }
 }
}