org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name'com.backintime.BackInTimeSpring.Service.TeacherServiceTest': Unsatisfied dependency expressed through field 'teacherService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.backintime.BackInTimeSpring.Service.TeacherService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
package com.backintime.BackInTimeSpring.Model.Repository;
@Component
@Repository
public interface ITeacherRepository extends MongoRepository<Teacher,String> {
@Query("{}")
Stream<Teacher> findAllTeachers();
List<Teacher> findByLastNameIgnoreCase(String lastName);
List<Teacher> findByFirstNameIgnoreCase(String firstName);
}
package com.backintime.BackInTimeSpring.Service;
@Component
@Service
public class TeacherService {
@Autowired
private ITeacherRepository teacherRepository;
public List<Teacher> retrieveAllTeachers(){
return this.teacherRepository.findAllTeachers().sorted(Comparator.comparing(Teacher::getLastName)).collect(Collectors.toList());
}
public Teacher retrieveTeachersById(String id) {
return this.teacherRepository.findAllTeachers().filter(t -> t.getId().equals(id)).findFirst().get();
}
public List<Teacher> retrieveTeachersByLastName(String lastName){
return this.teacherRepository.findByLastNameIgnoreCase(lastName);
}
public List<Teacher> retrieveTeachersByFirstName(String firstName){
return this.teacherRepository.findByFirstNameIgnoreCase(firstName);
}
public void saveTeacher(Teacher t){
this.teacherRepository.save(t);
}
public String greet() {
return "Hello World";
}
}package com.backintime.BackInTimeSpring.Service;
@RunWith(SpringRunner.class)
@ComponentScan(basePackages = "com.backintime.BackInTimeSpring")
public class TeacherServiceTest {
@Autowired
TeacherService teacherService;
@Test
public void retrieveAllTeachers() {
assertEquals(3, teacherService.retrieveAllTeachers().size());
}
这是因为您在错误的地方使用@ComponentScan
。
通常它在您的Main Application类或配置类中使用,而不是在您定义bean的位置。
请参考此链接:https://springframework.guru/spring-component-scan/
这里有一个类似的问题,你可以看到它们在主应用程序中使用@ComponentScan
也是如此