目錄
問題內容
解決方法
首頁 Java com.example.demo.service.UserServiceImpl 中建構函數的參數 0 需要類型為「com.example.demo.dao.UserDao」的 bean

com.example.demo.service.UserServiceImpl 中建構函數的參數 0 需要類型為「com.example.demo.dao.UserDao」的 bean

Feb 08, 2024 pm 10:09 PM
spring框架

在開發過程中,我們常常會遇到各種錯誤和異常。其中一個常見的問題是在使用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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

利用Spring Boot以及Spring AI建構生成式人工智慧應用 利用Spring Boot以及Spring AI建構生成式人工智慧應用 Apr 28, 2024 am 11:46 AM

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

修改spring gateway中的RequestBody 修改spring gateway中的RequestBody Feb 09, 2024 pm 07:15 PM

我想在將requestbody路由到給定的uri之前修改它。基於我正在使用的文檔org.springframework.cloud.gateway.filter.factory.rewrite.modifyrequestbodygatewayfilterfactory修改正文。啟動我的伺服器時,伺服器無法啟動並出現以下錯誤原因:元素[spring.cloud.gateway.routes[0].filters[0].modifyrequestbody.class]未綁定。 \n\n操作:\

JAX-RS 與 Spring MVC:一場 RESTful 巨頭的較量 JAX-RS 與 Spring MVC:一場 RESTful 巨頭的較量 Feb 29, 2024 pm 05:16 PM

簡介RESTfulapi已經成為現代WEB應用程式中不可或缺的一部分。它們提供了一種標準化的方法來創建和使用Web服務,從而提高可移植性、可擴展性和易用性。在Java生態系統中,JAX-RS和springmvc是建構RESTfulAPI的兩個最受歡迎的框架。本文將深入探討這兩種框架,並比較它們的特性、優點和劣勢,幫助您做出明智的決定。 JAX-RS:JAX-RSAPIJAX-RS(JavaAPIforRESTfulWebServices)是由JavaEE開發的標準JAX-RSAPI,用於開發REST

深入了解Spring框架的架構與工作原理 深入了解Spring框架的架構與工作原理 Jan 24, 2024 am 09:41 AM

深入剖析Spring框架的架構與工作原理引言:Spring是Java生態系統中最受歡迎的開源框架之一,它不僅提供了一套強大的容器管理和依賴注入功能,還提供了許多其他功能,如事務管理、AOP、資料存取等。本文將深入剖析Spring框架的架構與工作原理,並透過具體的程式碼範例來解釋相關概念。一、Spring框架的核心概念1.1IoC(控制反轉)Spring的核心

優化程序日誌記錄:log4j日誌等級設定技巧分享 優化程序日誌記錄:log4j日誌等級設定技巧分享 Feb 20, 2024 pm 02:27 PM

最佳化程序日誌記錄:log4j日誌等級設定技巧分享摘要:程式的日誌記錄對於問題排查、效能調優和系統監控都起著關鍵作用。本文將分享log4j日誌等級設定的技巧,包括如何設定不同等級的日誌以及如何透過程式碼範例來說明設定過程。導語:在軟體開發中,日誌記錄是一項非常重要的工作。透過記錄程式在運行過程中的關鍵訊息,可以幫助開發者找出問題發生的原因,進行效能最佳化和系統監控

Oracle資料庫連線方式詳解 Oracle資料庫連線方式詳解 Mar 08, 2024 am 08:45 AM

Oracle資料庫連線方式詳解在應用程式開發中,資料庫連線是一個非常重要的環節,它承載著應用程式與資料庫之間的資料互動。 Oracle資料庫是一款功能強大、效能穩定的關聯式資料庫管理系統,在實際開發中,我們需要熟練不同的連接方式來與Oracle資料庫互動。本文將詳細介紹Oracle資料庫的幾種常見連接方式,並提供相應的程式碼範例,幫助讀者更好地理解和應用

Java反射機制在Spring框架的應用? Java反射機制在Spring框架的應用? Apr 15, 2024 pm 02:03 PM

Java反射機制在Spring框架中廣泛用於以下方面:依賴注入:透過反射實例化bean和注入相依性。類型轉換:將請求參數轉換為方法參數類型。持久化框架整合:映射實體類別和資料庫表。 AspectJ支援:攔截方法呼叫和增強程式碼行為。動態代理:建立代理物件以增強原始物件的行為。

Java JNDI 與 Spring 整合的秘訣:揭秘 Java JNDI 與 Spring 框架的無縫協作 Java JNDI 與 Spring 整合的秘訣:揭秘 Java JNDI 與 Spring 框架的無縫協作 Feb 25, 2024 pm 01:10 PM

JavaJNDI與spring整合的優勢JavaJNDI與Spring框架的整合具有諸多優勢,包括:簡化JNDI的使用:Spring提供了抽象層,簡化了JNDI的使用,無需編寫複雜的JNDI程式碼。集中管理JNDI資源:Spring可以集中管理JNDI資源,以便於尋找和管理。支援多種JNDI實現:Spring支援多種JNDI實現,包括JNDI、JNP、RMI等。無縫整合Spring框架:Spring與JNDI的整合非常緊密,無縫整合Spring框架。如何整合JavaJNDI與Spring框架整合Ja