首页 > 解决方案 > 没有可用的名为“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;
    }

}

标签: javamysqlspringspring-mvc

解决方案


你的代码

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);

推荐阅读