簡體   English   中英

沒有匹配的 bean 類型……為依賴找到……預計至少有 1 個符合自動裝配候選者的 bean

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM