Я пытаюсь применить некоторый весенний загрузочный код к унаследованному проекту из моей работы, проблема в том, что некоторые классы имеют перегруженные конструкторы, и я не знаю, как их вызывать с помощью весенней загрузки:
Код выглядит следующим образом:
@Component
ClassA {
public void doSomething() {
int a;
SomeObjectB b;
ClassB classB = null;
classB = new ClassB(a, ab, b);
}
}
@Service
classB {
@Autowired
private ClassC classC;
classB(int a, SomeObjectA a) {
//Logic with parameters
}
classB(int a, SomeObjectB b) {
//Some logic
classC.someMethod(b)
//More logic
}
classB(int a, SomeObjectC c) {
//Logic with parameters
}
}
@Component
ClassC {
public void someMethod(SomeObjectB b) {
}
}
Внутри класса ClassA создается экземпляр класса B, который я пытаюсь вызвать, выполняя classB = new ClassB(a, ab, b);
, поэтому класс с автопроводкой Class C равен нулю, поскольку он вышел из пружины. контекст. Я попытался реализовать фабричный метод с областью действия прототипа для создания нового Бина при каждом вызове класса, однако он не работает должным образом.
Это то, что я получил до сих пор:
@Component
ClassA {
@Autowired
private Function<String, ClassB> myPrototypeFactory;
public void doSomething() {
int a;
SomeObjectB b;
Map myMap = new HashMap<>();
myMap.put("a", a);
myMap.put("b", b);
myPrototypeFactory.apply(myMap);
}
}
@Configuration
ConfigurationClass {
@Bean
public Function<Map<String, Object>, ClassB> myPrototypeFactory() {
return map -> {
return myObjectPrototype((int)map.get("a"), (SomeObjectB)map.get("b"));
};
}
@Bean
@Scope(value = "prototype")
public ClassB myObjectPrototype(int a, SomeObjectB b) {
return new ClassB(a, b);
}
}
Итак, вопрос в том, как вызвать перегруженный конструктор из ClassB, чтобы избежать нулевых значений в полях @Autowired? Я впервые сталкиваюсь с подобной проблемой.
Любая помощь будет по достоинству оценена.