Spring @Autowired

0

Witam,

Zacząłem bawić się springiem oraz hibernate. Napisałem sobie jakąś prostą aplikację operującą na bazie danych. Wszystko było w porządku.
Spróbowałem więc połączyć to z interfejsem użytkownika przy pomocy JavyFX. Mam formatkę, gdzie posiadam dwa pola: login i hasło oraz przycisk zaloguj.

Napisałem sobie klasę UserDAO:

@Repository
public class UserDAO implements IUserDAO {

    @Autowired
    private SessionFactory sessionFactory;

    public UserDAO() {
    }

    @Override
    public void createUser(User user) {
        Session session = sessionFactory.openSession();

        try {
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();

        } catch (RuntimeException e) {
            if(session.getTransaction() != null)
                session.getTransaction().rollback();
            e.printStackTrace();

        } finally {
            session.flush();
            session.close();
        }
    }

   // ...
}

Tutaj kontroler tego okna:

@ComponentScan({"user"})
public class loginPanelController {

    private final static Logger LOGGER = Logger.getLogger(loginPanelController.class.getName());

    @FXML private TextField emailTxt;
    @FXML private PasswordField passTxt;
    @FXML private Button loginButton;
    @FXML private ImageView exitButton;

    @Autowired
    private UserDAO userService;

    @FXML
    public void LoginButtonClicked(MouseEvent mouseEvent) {
        String email = emailTxt.getText();
        String password = passTxt.getText();
        User u = null;

        try {
            u = userService.isUserExist(email, password);
        } catch (UserNotExistException e) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("Magazyn");
            alert.setHeaderText(e.getMessage());
            alert.setContentText(null);
            alert.showAndWait();
        }

        if(u != null) {
            try {

                String resource;

                if(!u.getPermissions()) {
                    resource = "/view/mainPanel/mainPanel.fxml";
                } else {
                    resource = "/view/adminPanel/adminPanel.fxml";
                }

                Stage loginStage = (Stage) Stage.getWindows().get(0);
                loginStage.close();

                FXMLLoader loader = new FXMLLoader(getClass().getResource(resource));
                Parent root = loader.load();
                mainPanelController mainPanelController = loader.getController();
                mainPanelController.setUser(u);
                mainPanelController.setUserInfoLabel();
                Stage mainStage = new Stage();
                mainStage.setScene(new Scene(root));
                mainStage.show();

            } catch (IOException e) {
                LOGGER.warning("Bład podczas tworzenia głównego okna!");
                e.printStackTrace();
            }
        }
    }

    @FXML
    public void ExitButtonClicked(MouseEvent mouseEvent) {
        System.exit(0);
    }

}

W czym jest problem: Ani w kontrolerze ani w DAO Spring nie wstrzykuje obiektów. Co może być tego przyczyną?

Pozdrawiam

0
wyebani napisał(a):

Witam,

Zacząłem bawić się springiem oraz hibernate. Napisałem sobie jakąś prostą aplikację operującą na bazie danych. Wszystko było w porządku.
Spróbowałem więc połączyć to z interfejsem użytkownika przy pomocy JavyFX. Mam formatkę, gdzie posiadam dwa pola: login i hasło oraz przycisk zaloguj.

Napisałem sobie klasę UserDAO:

@Repository
public class UserDAO implements IUserDAO {

    @Autowired
    private SessionFactory sessionFactory;

    public UserDAO() {
    }

    @Override
    public void createUser(User user) {
        Session session = sessionFactory.openSession();

        try {
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();

        } catch (RuntimeException e) {
            if(session.getTransaction() != null)
                session.getTransaction().rollback();
            e.printStackTrace();

        } finally {
            session.flush();
            session.close();
        }
    }

   // ...
}

Tutaj kontroler tego okna:

@ComponentScan({"user"})
public class loginPanelController {

    private final static Logger LOGGER = Logger.getLogger(loginPanelController.class.getName());

    @FXML private TextField emailTxt;
    @FXML private PasswordField passTxt;
    @FXML private Button loginButton;
    @FXML private ImageView exitButton;

    @Autowired
    private UserDAO userService;

    @FXML
    public void LoginButtonClicked(MouseEvent mouseEvent) {
        String email = emailTxt.getText();
        String password = passTxt.getText();
        User u = null;

        try {
            u = userService.isUserExist(email, password);
        } catch (UserNotExistException e) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("Magazyn");
            alert.setHeaderText(e.getMessage());
            alert.setContentText(null);
            alert.showAndWait();
        }

        if(u != null) {
            try {

                String resource;

                if(!u.getPermissions()) {
                    resource = "/view/mainPanel/mainPanel.fxml";
                } else {
                    resource = "/view/adminPanel/adminPanel.fxml";
                }

                Stage loginStage = (Stage) Stage.getWindows().get(0);
                loginStage.close();

                FXMLLoader loader = new FXMLLoader(getClass().getResource(resource));
                Parent root = loader.load();
                mainPanelController mainPanelController = loader.getController();
                mainPanelController.setUser(u);
                mainPanelController.setUserInfoLabel();
                Stage mainStage = new Stage();
                mainStage.setScene(new Scene(root));
                mainStage.show();

            } catch (IOException e) {
                LOGGER.warning("Bład podczas tworzenia głównego okna!");
                e.printStackTrace();
            }
        }
    }

    @FXML
    public void ExitButtonClicked(MouseEvent mouseEvent) {
        System.exit(0);
    }

}

W czym jest problem: Ani w kontrolerze ani w DAO Spring nie wstrzykuje obiektów. Co może być tego przyczyną?

Pozdrawiam

  1. A jak tworzysz klase loginPanelController (swoja drogą powinna sie zaczynać z wielkiej litery) ? Pewnie gdzieś w kodzie tworzysz ją przez new loginPanelController().
  2. Podaj jak wygląda Twój config ze springa bo bez tego ciężko będzie pomóc.
  3. loginPanelController też powinien być springowym beanem żeby spring sobie tam mógł to wstrzyknąć.
0

@podroznik:
Masz rację powinno być z wielkiej, mój błąd, dzięki zaraz poprawię.

       Parent root = FXMLLoader.load(getClass().getResource("/view/loginPanel/loginPanel.fxml"));
       primaryStage.setScene(new Scene(root));
       primaryStage.initStyle(StageStyle.TRANSPARENT);
       primaryStage.show();
spring.datasource.url=jdbc:mysql://localhost:3306/magazyn?useUnicode=yes&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.connection.characterEncoding=utf-8
spring.jpa.properties.hibernate.connection.CharSet=utf-8
spring.jpa.properties.hibernate.connection.useUnicode=true

  1. To znaczy, że powinienem nad klasą dopisać @Bean? Wtedy dostaję błędy..
0

Z tego co widze korzystasz ze spring boota (popraw mnie jeśli się mylę). Proponuję poczytać dokładnie jak powinna wyglądać przykładowa konfiguracja springa bo dodawanie @ComponentScan({"user"}) nad kontrolerem pokazuje tylko, że nie masz pojęcia co robisz. Jak się domyślam to jest aplikacja desktopowa to musiałbyś dać tam @Service albo @Component i tworzyć ten controller przez springa a nie przez new (o ile tak robisz).

1 użytkowników online, w tym zalogowanych: 0, gości: 1