如何在配置中定义bean



我的Spring Boot应用程序遇到了一个问题。当尝试运行应用程序时,我在com.task_manager.backend中得到构造函数参数0的错误消息。appController需要一个'com.task_manager.backend '类型的bean。找不到任务库。"谁能提出解决这个问题的办法?

错误信息:描述:

com.task_manager.backend中构造函数的参数0。appController需要一个'com.task_manager.backend '类型的bean。无法找到TaskRepository' .

行动:

考虑定义一个'com.task_manager.backend '类型的bean。配置中的TaskRepository。'

我已经检查了我的代码,并确保TaskRepository接口被正确定义和导入。我还检查了应用程序属性文件,并确保数据库连接详细信息是正确的。

Controller.java

package com.task_manager.backend;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@Data
public class appController {
private final UserRepository userRepository;
@GetMapping("Users")
public List<User> getUsers(){
return userRepository.findAll();
}
@PostMapping("addUser")
public User addUser(@RequestBody User user){
return  userRepository.save(user);
}
}

主要

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

User.java

package com.task_manager.backend;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy =  GenerationType.AUTO)
private Long id;
private String name;
private String email;
private String password;


}

UserRepository.java

package com.task_manager.backend;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User,Long> {
}

注意:所有文件在同一个包

将你的主类BackendApplication从

移开
package com.task_manager.backend

package com.task_manager

确保你的控制器有这个代码

@RestController
public class appController {
private UserRepository userRepository;
@Autowired
public EmployeeRestController(UserRepository theUserRepository ) {
userRepository = theUserRepository;
}
@GetMapping("/users")
public List<User> getUsers(){
return userRepository.findAll();
}
@PostMapping("/addUser")
public User addUser(@RequestBody User user){
return  userRepository.save(user);
}
}

在private final UserRepository中添加@Autowired;

package com.task_manager.backend;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@Data
public class appController {
@Autowired
private final UserRepository userRepository;
@GetMapping("Users")
public List<User> getUsers(){
return userRepository.findAll();
}
@PostMapping("addUser")
public User addUser(@RequestBody User user){
return  userRepository.save(user);
}
}

首先-建议将Main Application类放置在根包中,并带有@SpringBootApplication(@ComponentScan,@EnableAutoConfiguration@Configuration的组合)之类的注释。它允许Spring扫描根包和子包中的所有类。参考阅读这个- https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/using-boot-using-springbootapplication-annotation.html根据这一点,移动你的主类到根包com.task_manager和控制器类在com.task_manager.backend

现在试试

@RestController
@RequiredArgsConstructor
public class appController {
private final UserRepository userRepository;
@GetMapping("Users")
public List<User> getUsers(){
return userRepository.findAll();
}
@PostMapping("addUser")
public User addUser(@RequestBody User user){
return  userRepository.save(user);
}
}

For lombok, Make sure you have enabled annotation processor in your IDE.

当使用构造函数设置注入的属性时,您不必提供@Autowired注释。从Spring Framework 4.2版本开始,为依赖注入添加构造函数的注释已经是可选的了。

你需要像这样在appController中添加一个Constructor方法:

public appController(UserRepository userRepository){
this.userRepository= userRepository;
}

或者在appController类之上添加注释@AllArgsConstructor