Я использую приложение Spring Boot MVC. У меня есть класс @Configuration
, который инициализирует компонент в ApplicationContext
с использованием @Bean
. У меня есть класс @Controller
, в который я пытаюсь автоподписать компонент, используя аннотацию @Autowired
.Метод Spring @Bean, выполняющийся после @Autowired
Результат: @Autowired
Поле null
.
DEBUG: Я попытался отладить, чтобы увидеть порядок выполнения. Я ожидал увидеть, что класс, аннотированный @Configuration
, будет запускаться первым, чтобы инициализировать bean-компонент в контексте приложения. Однако сначала был создан экземпляр класса контроллера. Затем был вызван метод класса конфигурации @Bean
. Из-за этого компонента создается экземпляр после контроллера, и именно поэтому контроллер не получает bean-автоувеличивание.
Вопрос: Как выполнить метод @Configuration
@Bean
до создания класса контроллера?
код класса конфигурации:
@Configuration
public class RootConfiguration2 {
@Autowired
private IService<ActBinding> bindingService;
@Bean
public Map<String, String> getBingindNameToRoutingKeyMap() throws Exception {
ListOperation<ActBinding> operation = ListOperation.from("key", "name", "exchangeId");
operation.sort("key", SortOrder.Ascending);
Iterable<ActBinding> result = bindingService.list(operation).getResult();
Map<String, String> bindingNameToRoutingKey = new HashMap<>();
result.forEach(x -> bindingNameToRoutingKey.put(x.getName(), x.getKey()));
return Collections.unmodifiableMap(bindingNameToRoutingKey);
}
}
Вы можете поделиться кодом класса конфигурации? –
Включите ведение журнала и проверьте наличие предупреждающих сообщений. – OrangeDog
Вам нужно будет показать код для IService и где вы вводите getBingindNameToRoutingKeyMap. Это может быть круговая зависимость, хотя вы не упомянули такую ошибку. Это может быть опечатка, когда инъекция getBingindNameToRoutingKeyMap в паре с @Autowring (обязательно = false) ... нужно больше кода. –
alexbt