Рассмотрим интерфейс Action и два реализующих его класса: StupidAction и SmartAction.
SmartAction необходимо использовать другую службу, но поскольку действие создается во время выполнения, аннотация @Autowired не работает (служба имеет значение null).
Неправильно ли использовать шаблон «Стратегия» с Spring? Есть ли хорошее решение этой проблемы?
Я мог бы также установить «StupidAction» как службу, а не создавать ее экземпляр. Я мог бы также передать автоматически подключенные службы «doSomething» в параметрах метода. Но оба решения действительно грязные.
Некоторые примеры кода:
public interface Action {
void doSomething();
}
public class StupidAction implements Action{
@Autowired
private MyService myService; // THIS IS NULL. because StupidAction is instanciated at runtime.
public void doSomething(){
myService.changeSomething()
}
}
//Pseudo code
@RestController
@RequestMapping(path = "/")
public class WorkflowController {
@GetMapping("")
ResponseEntity someAPI() {
Action action = new SmartAction(); //create on runtime
action.doSomething(); //NullPointerExc
}
}
Подробнее здесь: https://stackoverflow.com/questions/618 ... y-strategy
Как использовать службу @Autowired в объекте, созданном с использованием шаблона фабрики/стратегии (созданного во время ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение