搜索
首页Javacom.example.demo.service.UserServiceImpl 中构造函数的参数 0 需要类型为'com.example.demo.dao.UserDao”的 bean

在开发过程中,我们经常会遇到各种错误和异常。其中一个常见的问题是在使用Spring框架的时候,遇到了类似于"com.example.demo.service.UserServiceImpl 中构造函数的参数 0 需要类型为“com.example.demo.dao.UserDao”的 bean"的错误信息。这个错误提示意味着在UserServiceImpl类的构造函数中,第一个参数需要注入一个类型为UserDao的bean,但是系统找不到对应的bean。解决这个问题的方法有很多,本文将为大家介绍一种简单有效的解决方案。

问题内容

谁能帮我调试这个错误

parameter 0 of constructor in com.example.demo.service.userserviceimpl required a 
bean of type 'com.example.demo.dao.userdao' that could not be found.

action:

consider defining a bean of type 'com.example.demo.dao.userdao' in your configuration.

以下是我的文件:

usercontroller.java

package com.example.demo.controller;

import com.example.demo.model.user;
import com.example.demo.service.userservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.*;

import java.util.list;

@restcontroller
@requestmapping("/api/users")
public class usercontroller {

    @autowired
    private final userservice userservice;
    
    public usercontroller(userservice userservice) {
        this.userservice = userservice;
    }

    @getmapping("/{userid}")
    public user getuserbyid(@pathvariable long userid) {
        return userservice.getuserbyid(userid);
    }

    @getmapping
    public list<user> getallusers() {
        return userservice.getallusers();
    }

    @postmapping
    public long adduser(@requestbody user user) {
        return userservice.adduser(user);
    }

    @putmapping("/{userid}")
    public void updateuser(@pathvariable long userid, @requestbody user user) {
        user.setuserid(userid);
        userservice.updateuser(user);
    }

    @deletemapping("/{userid}")
    public void deleteuser(@pathvariable long userid) {
        userservice.deleteuser(userid);
    }
}

userservice.java

package com.example.demo.service;

import com.example.demo.model.user;
import org.springframework.stereotype.component;
import org.springframework.stereotype.service;

import java.util.list;

public interface userservice {
    user getuserbyid(long userid);

    list<user> getallusers();

    long adduser(user user);

    void updateuser(user user);

    void deleteuser(long userid);
}

userserviceimpl.java

package com.example.demo.service;

import com.example.demo.dao.userdao;
import com.example.demo.model.user;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;

import java.util.list;

@service
public class userserviceimpl implements userservice {
    
    private final userdao userdao;

    @autowired
    public userserviceimpl(userdao userdao) {
        this.userdao = userdao;
    }

    @override
    public user getuserbyid(long userid) {
        return userdao.getuserbyid(userid);
    }

    @override
    public list<user> getallusers() {
        return userdao.getallusers();
    }

    @override
    public long adduser(user user) {
        return userdao.adduser(user);
    }

    @override
    public void updateuser(user user) {
        userdao.updateuser(user);
    }

    @override
    public void deleteuser(long userid) {
        userdao.deleteuser(userid);
    }
}

userdaoimpl.java

package com.example.demo.dao;

import com.example.demo.model.user;
import org.springframework.jdbc.core.beanpropertyrowmapper;
import org.springframework.jdbc.core.jdbctemplate;
import org.springframework.stereotype.repository;

import java.util.list;

@repository
public class userdaoimpl implements userdao {

    private final jdbctemplate jdbctemplate;

    public userdaoimpl(jdbctemplate jdbctemplate) {
        this.jdbctemplate = jdbctemplate;
    }

    @override
    public user getuserbyid(long userid) {
        string sql = "select * from user where user_id = ?";
        return jdbctemplate.queryforobject(sql, new object[]{userid}, new beanpropertyrowmapper<>(user.class));
    }

    @override
    public list<user> getallusers() {
        string sql = "select * from user";
        return jdbctemplate.query(sql, new beanpropertyrowmapper<>(user.class));
    }

    @override
    public long adduser(user user) {
        string sql = "insert into user (first_name, last_name, email, user_avatar_url, podcast_id) " +
                "values (?, ?, ?, ?, ?)";
        jdbctemplate.update(sql, user.getfirstname(), user.getlastname(), user.getemail(),
                user.getuseravatarurl(), user.getpodcastid());

        // retrieve the auto-generated user_id
        return jdbctemplate.queryforobject("select last_insert_id()", long.class);
    }

    @override
    public void updateuser(user user) {
        string sql = "update user set first_name = ?, last_name = ?, email = ?, " +
                "user_avatar_url = ?, podcast_id = ? where user_id = ?";
        jdbctemplate.update(sql, user.getfirstname(), user.getlastname(), user.getemail(),
                user.getuseravatarurl(), user.getpodcastid(), user.getuserid());
    }

    @override
    public void deleteuser(long userid) {
        string sql = "delete from user where user_id = ?";
        jdbctemplate.update(sql, userid);
    }
}

userdao.java

package com.example.demo.dao;
import com.example.demo.model.user;

import java.util.list;

public interface userdao {
    user getuserbyid(long userid);

    list<user> getallusers();

    long adduser(user user);

    void updateuser(user user);

    void deleteuser(long userid);
}

demoapplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
//@ComponentScan("com.example.demo.service")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

我在 demoapplication.java 中尝试过 @componentscan("com.example.demo.service") 但它不起作用。

我还尝试放置@autowire并用@service标记服务。我还检查了所有其他注释,没有发现任何其他遗漏的内容

我希望有一个干净的构建和对 api 的访问

错误

解决方法

您缺少 userservice 的实现。如果您想保留 @repository (userdao) 的当前实现,那么您可以按如下方式重写您的服务:

@Service
public class UserService {

    private final UserDao userDao;

    @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    // implement using your DAO
    User getUserById(Long userId);
    List<User> getAllUsers();
    Long addUser(User user);
    void updateUser(User user);
    void deleteUser(Long userId);
}

这应该使其可供 usercontroller 使用。

以上是com.example.demo.service.UserServiceImpl 中构造函数的参数 0 需要类型为'com.example.demo.dao.UserDao”的 bean的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:stackoverflow。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器