1) RpgGameClient
не объявлен в качестве кандидата в бин.Поэтому Spring игнорирует это.
Вы можете сделать это, пометив класс, например, @Component
(самый простой способ) или объявив метод @Bean
, который возвращает экземпляр класса.
2) Даже при этом он не будет работать по-прежнему, так как @Autowired
не работает для static
полей.Spring внедряет зависимости в bean-компонент, а bean-компонент - это экземпляр класса.
Я думаю, что runGame()
также должен быть не static
.Делать все статично для бобовой пружины бессмысленноТо же самое относится и к классу загрузочных приложений Spring.
3) Внедрение в конструктор должно быть предпочтительным по сравнению с инжекцией в полевых условиях.
Так что должно быть лучше:
@Component
public class RpgGameClient {
private GameService gameService;
public RpgGameClient(GameService gameService){
this.gameService = gameService;
}
public void runGame() {
gameService.createNewGame();
}
}
И изменить класс приложения Spring Boot для использования зависимости внедрения, такой как:
@SpringBootApplication
public class RpgGameApplication {
@Autowired
RpgGameClient rpgGameClient;
@PostConstruct
public void postConstruct(){
rpgGameClient.runGame();
}
public static void main(String[] args) {
SpringApplication.run(RpgGameApplication.class, args);
}
}