java - 没有可用的名为“DAOBean”的 bean
问题描述
我正在尝试从数据库中获取信息并将其显示在网页上
这是我的 AppController
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;
}
}
这是我使用 Annotation 的 AppConfig.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());
}
}
这是 AppDAOImpl.java
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();
}
}
}
}
}
这是模型类
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;
}
}
解决方案
你的代码
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("AppConfig.class");
比赛
/**
* 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){...
}
它将尝试扫描“AppConfig.class”路径但不注册它,因此上下文找不到您的 DAOBean。
你可以尝试使用:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);