1
votes

Aucun bean nommé 'DAOBean' disponible

J'essaie de récupérer la base de données du formulaire d'information et de l'afficher sur la page Web J'utilise spring jdbc en utilisant la configuration d'annotation, il donne une erreur aucun bean nommé "DAOBean" disponible je l'ai vérifié plusieurs fois mais je n'ai pas pu le résoudre, aidez-moi

​​ceci est mon AppController

package shrikant.spring.model;

public class Users {
    private int userId;
    private String name;
    private String email;

    @Override
    public String toString() {
        return "Users [userId=" + userId + ", name=" + name + ", email=" + email + "]";
    }

    public Users(int userId, String name, String email) {
        this.userId = userId;
        this.name = name;
        this.email = email;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

ceci est ma classe de configuration AppConfig.java utilisant Annotation

package shrikant.spring.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import shrikant.spring.model.Users;

public class AppDAOImpl implements AppDAO {

    private DataSource dataSource;

    public AppDAOImpl(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public List<Users> listUsers() {
        String SQL = "Select * from users";
        List<Users> listUsers = new ArrayList<Users>();
        Connection conn = null;
        try {
            conn = `dataSource.getConnection`();
            PreparedStatement ps = conn.prepareStatement(SQL);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Users temp = new Users(rs.getInt("users_id"), rs.getString("name"), rs.getString("email"));
                listUsers.add(temp);
            }
            rs.close();
            ps.close();
            return listUsers;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

ceci est AppDAOImpl.java

package shrikant.spring.config;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import shrikant.spring.DAO.AppDAOImpl;

@Configuration
public class AppConfig {

    @Bean
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/project1");
        dataSource.setUsername("root");
        dataSource.setUsername("shrikant@123");
        return dataSource;
    }

    @Bean(name="DAOBean")
    public AppDAOImpl AppDAO() {
        return new AppDAOImpl(getDataSource());
    }
}

c'est la classe modèle

 package shrikant.spring;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    import shrikant.spring.DAO.AppDAOImpl;
    import shrikant.spring.model.Users;
    
    @Controller
    public class AppController {
    
        @RequestMapping("/")
        public ModelAndView homepage() {
            ModelAndView modelAndView = new ModelAndView("index");
            List<Users> users = new ArrayList<Users>();
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("AppConfig.class");
            AppDAOImpl DAO = context.getBean("DAOBean",AppDAOImpl.class);
            users = DAO.listUsers();
            modelAndView.addObject("users", users);
            context.close();
            return modelAndView;
        }
    } 


0 commentaires

4 Réponses :


0
votes

Lorsque vous appelez new AnnotationConfigApplicationContext ("AppConfig.class"); vous créez un nouveau contexte d'application, mais il est déjà là. vous devez utiliser l'annotation @Autowired pour injecter le bean dans votre contrôleur.

Quelques conseils:

  • Vous pouvez utiliser l'annotation @Service sur la classe AppDAOImpl pour créer un bean
  • Utiliser l'interface lors de l'injection de beans

AppDAOImpl

package shrikant.spring.config;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import shrikant.spring.DAO.AppDAOImpl;

@Configuration
public class AppConfig {
    
    @Bean
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/project1");
        dataSource.setUsername("root");
        dataSource.setUsername("shrikant@123");
        return dataSource;
    }
}

AppController

package shrikant.spring.config;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import shrikant.spring.DAO.AppDAOImpl;
import shrikant.spring.DAO.AppDAO;
import shrikant.spring.model.Users;

@Controller
public class AppController {
    
    private AppDao appDAOImpl;
    
    @Autowired
    public AppController(AppDao appDAOImpl) {
        this.appDAOImpl = appDAOImpl;
    }
    
    @RequestMapping("/")
    public ModelAndView homepage() {
        ModelAndView modelAndView = new ModelAndView("index");
        List<Users> users = new ArrayList<Users>();
        users = appDaoImpl.listUsers();
        modelAndView.addObject("users", users);
        return modelAndView;
    }
} 

AppConfig

package shrikant.spring.DAO;

import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import shrikant.spring.model.Users;

@Service
public class AppDAOImpl implements AppDAO {

    private DataSource dataSource;

    public AppDAOImpl(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public List<Users> listUsers() {
        String SQL = "Select * from users";
        List<Users> listUsers = new ArrayList<Users>();
        Connection conn = null;
        try {
            conn = `dataSource.getConnection`();
            PreparedStatement ps = conn.prepareStatement(SQL);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Users temp = new Users(rs.getInt("users_id"), rs.getString("name"), rs.getString("email"));
                listUsers.add(temp);
            }
            rs.close();
            ps.close();
            return listUsers;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


0 commentaires

-1
votes
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("shrikant.spring.config");

1 commentaires

La page Web est chargée sans erreur mais maintenant dans la console, elle lance "Accès refusé pour l'utilisateur 'shrikant @ 123' @ 'localhost' (en utilisant le mot de passe: NON)"



3
votes

votre code

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

correspond

/**
     * Create a new AnnotationConfigApplicationContext, scanning for components
     * in the given packages, registering bean definitions for those components,
     * and automatically refreshing the context.
     * @param basePackages the packages to scan for component classes
     */
    public AnnotationConfigApplicationContext(String... basePackages){...
    }

qui essaiera de scanner le chemin "AppConfig.class" mais ne l'enregistrera pas, donc le contexte ne trouve pas votre DAOBean.

vous pouvez essayer d'utiliser:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("AppConfig.class");


0 commentaires

0
votes
I have gone through the code ,reason for it is App context is not able to register your component as bean.I have made changes and it is working .Datasource is getting created at app level all you have to is autowire it

@Component
public class AppDAOImpl implements AppDAO {
    

    private DataSource dataSource;
    @Autowired
    public AppDAOImpl(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public List<Users> listUsers() {
        String SQL = "Select * from users";
        List<Users> listUsers = new ArrayList<Users>();
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(SQL);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Users temp = new Users(rs.getInt("users_id"), rs.getString("name"), rs.getString("email"));
                listUsers.add(temp);
            }
            rs.close();
            ps.close();
            return listUsers;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


@Configuration
public class AppConfig {

   // @Bean
    @Bean(name="DAOBean")
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/project1");
        dataSource.setUsername("root");
        dataSource.setUsername("shrikant@123");
        return dataSource;
    }
    /*
     * @Bean(name="DAOBean") public AppDAOImpl AppDAO() { return new
     * AppDAOImpl(getDataSource()); }
     */
}

@Controller
public class AppController {
    @Autowired
    AppDAOImpl DAO;

    @RequestMapping("/")
    public ModelAndView homepage() {
        ModelAndView modelAndView = new ModelAndView("index");
        List<Users> users = new ArrayList<Users>();
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("AppConfig.class");
       // AppDAOImpl DAO = context.getBean("DAOBean",AppDAOImpl.class);
        users = DAO.listUsers();
        modelAndView.addObject("users", users);
        context.close();
        return modelAndView;
    }
} 

0 commentaires