Как использовать службу @Autowired в объекте, созданном с использованием шаблона фабрики/стратегии (созданного во время JAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать службу @Autowired в объекте, созданном с использованием шаблона фабрики/стратегии (созданного во время

Сообщение Anonymous »

Рассмотрим интерфейс 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

Вернуться в «JAVA»