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; } }
4 Réponses :
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:
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(); } } } } }
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("shrikant.spring.config");
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)"
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");
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; } }