@pashaa

Почему @Autowired возвращает null?

@Service("manager")
public class Manager_Main {
@Autowired
private Manager_Clients manager_clients;
@Autowired
private Manager_Tur manager_tur;
@Autowired
private Manager_Vaucher manager_vaucher;
Scene scene;

private Manager_Main()
    {
        TabPane tabPane = new TabPane();
        scene = new Scene(tabPane);
        Tab tabC = new Tab("Клиенты");
        tabC.setContent(manager_clients.getGridPane1());
        Tab tabV = new Tab("Путевки");
        tabV.setContent(manager_tur.getGridPane1());
        Tab tabT = new Tab("Туры");
        tabT.setContent(manager_vaucher.getGridPane1());
        tabPane.getTabs().addAll(tabC,tabT,tabV);
    }

    public Scene getScene() {
        return scene;
    }
}

public class Main extends Application {
    private Stage stage;
    public void start(Stage primaryStage) throws Exception {
        setStage(primaryStage);
        primaryStage.setResizable(false);
        GenericXmlApplicationContext gtx = new GenericXmlApplicationContext();
        gtx.load("config.xml");
        gtx.refresh();
        Manager_Main authentication = (Manager_Main) gtx.getBean("manager");
    primaryStage.setScene(authentication.getScene());
    primaryStage.show();
    }

    public Stage getStage() {
        return stage;
    }
    public void setStage(Stage stage) {
        this.stage = stage;
    }
}

Все зависимости с аннотацией @Component. Если Manager_Main() сделать как метод с @PostConstruct, а не просто конструктор то все работает. А если Manager_Main() как конструктор то зависимости null. Почему так, как исправить?
  • Вопрос задан
  • 534 просмотра
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
Ребята из Spring не советуют использовать field autowiring, вместо этого они советуют передавать Ваши зависимости в конструктор. Т.е. можно сделать так:
private final Manager_Clients manager_clients;
private final Manager_Tur manager_tur;
private Manager_Vaucher manager_vaucher;

@Autowired
public Manager_Main(Manager_Clients manager_clients, Manager_Tur manager_tur, Manager_Vaucher manager_vaucher) {
this.manager_clients = manager_clients;
this.manager_tur = manager_tur;
this.manager_vaucher = manager_vaucher;
}


И да, скорее всего ваша проблема в отсутствии публичного конструктора по-умолчанию, пустого например.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
16 мая 2024, в 23:36
200000 руб./за проект
16 мая 2024, в 23:10
12000 руб./за проект