![](/img/trans.png)
[英]No matching bean of type path.repositoryClass found for dependency expected at least 1 bean which qualifies as autowire candidate for this dependency
[英]No matching bean of type … found for dependency....expected at least 1 bean which qualifies as autowire candidate
這已被多次回答,但我已經設置了所有注釋並且它似乎連接正確。
用戶服務接口:
public interface UserService {
User findUserById(Long id);
User findUserByName(String name);
List<User> findAllUsers();
void saveUser(User user);
void updateUser(User user);
void deleteUserById(long id);
void deleteAllUsers();
public boolean isUserExist(User user);
}
用戶服務實現
@Service
@Transactional
public class UserServiceImpl implements UserService {
private static final AtomicLong counter = new AtomicLong();
private static List<User> users;
static {
users = populateDummyUsers();
}
@Override
public User findUserById(Long id) {
for (User user : users) {
if (user.getId() == id) {
return user;
}
}
return null;
}
@Override
public User findUserByName(String name) {
for (User user : users) {
if (user.getUsername().equalsIgnoreCase(name)) {
return user;
}
}
return null;
}
失敗的測試用例:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringCrudApplication.class)
@ComponentScan("com.service")
public class ServiceTest {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Test
public void findUserByIdTest() throws Exception {
long id = (long) 0;
User userTest = new User(id,"Mike","644 Main St", "apple@gmail.com");
User user = userService.findUserById(id);
assert user.getAddress() != null;
assert user.getEmail() != null;
assert user.getUsername() != null;
}
我曾嘗試在 com.service 和 com.serviceImpl 的測試類中使用 componentScan,但沒有成功。
完整錯誤:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'com.service.test.ServiceTest':
Unsatisfied dependency expressed through method 'setUserService'
parameter 0: No qualifying bean of type [com.service.UserService]
found for dependency [com.service.UserService]: expected at least 1
bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {}; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
qualifying bean of type [com.service.UserService] found for
dependency [com.service.UserService]: expected at least 1 bean which
qualifies as autowire candidate for this dependency. Dependency
annotations: {}
- - - - - - - - - -解決方案 - - - - - - - - - -
我不得不將 @ComponentScan 添加到 main 方法中:
@SpringBootApplication
@ComponentScan("com.serviceImpl, com.service")
public class SpringCrudApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCrudApplication.class, args);
}
}
實現必須由 ComponentScan 找到,而不是接口。 因此,如果您的類 UserServiceImpl 位於包 com.serviceImpl 中,則必須掃描此包。
包名看起來很奇怪,包名只能小寫。 所以嘗試將包重命名為 com.service.impl 並掃描它。
因為你使用的是@Transactional,spring 會創建一個實現 UserService 的代理。 所以你只能注入 UserService 而不能注入 UserServiceImpl。 檢查您的代碼,可能是您嘗試在其他地方 @Autowire 一個 UserServiceImpl。
除了您的異常“沒有類型匹配的 bean..”之外,堆棧跟蹤中通常會出現“無法自動裝配”之類的消息,這會准確地說明 spring 嘗試注入什么類型的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.