Как использовать службу @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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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