Semasa proses pembangunan, kami sering menghadapi pelbagai ralat dan pengecualian. Salah satu masalah biasa ialah apabila menggunakan rangka kerja Spring, anda menghadapi sesuatu yang serupa dengan "Parameter 0 pembina dalam com.example.demo.service.UserServiceImpl memerlukan kacang jenis "com.example.demo.dao.UserDao" " mesej ralat. Mesej ralat ini bermakna bahawa dalam pembina kelas UserServiceImpl, parameter pertama perlu disuntik dengan kacang jenis UserDao, tetapi sistem tidak dapat mencari kacang yang sepadan. Terdapat banyak cara untuk menyelesaikan masalah ini, dan artikel ini akan memperkenalkan anda kepada penyelesaian yang mudah dan berkesan.
Siapa yang boleh membantu saya nyahpepijat ralat ini
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.
Berikut ialah fail saya:
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); } }
Saya mencuba @componentscan("com.example.demo.service")
dalam demoapplication.java tetapi ia tidak berfungsi.
Saya juga cuba meletakkan @autowire dan menandakan perkhidmatan dengan @service. Saya juga menyemak semua komen lain dan tidak menemui apa-apa lagi yang hilang
Saya mahu binaan yang bersih dan akses kepada api
Ralat
Anda kehilangan pelaksanaan semasa userservice
的实现。如果您想保留 @repository
(userdao
), maka anda boleh menulis semula perkhidmatan anda seperti berikut:
@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); }
Ini sepatutnya menjadikannya tersedia untuk usercontroller
untuk digunakan.
Atas ialah kandungan terperinci Parameter 0 pembina dalam com.example.demo.service.UserServiceImpl memerlukan kacang jenis 'com.example.demo.dao.UserDao'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!