没有为依赖项找到类型的限定bean

时间:2016-09-08 19:07:03

标签: spring spring-boot autowired

我要运行一个JUnit测试,我的春季启动项目我是这样的:

<div>
  <div>{{title}}</div>
  <div ng-include="body"></div>
</div>

服务:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.br.suppcomm.ocp.entity.Login;


public interface LoginDao extends JpaRepository<Login, Long>{
...
}

}

测试:

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.br.suppcomm.ocp.dao.CompanyDAO;
import com.br.suppcomm.ocp.dao.LoginDao;
import com.br.suppcomm.ocp.entity.Login;



@Service
public class LoginService  {

    @Autowired LoginDao loginDao; 


    @Autowired CompanyDAO companyDao;


    public void save(Login login) {

        loginDao.save(login);


    }


    public void delete(Login login) {
         loginDao.delete(login);
    }


    public Login findById(Login login) {
        return loginDao.findOne(login.getLoginId());
    }


    public Login findByEmail(Login login) {
        return loginDao.findByEmail(login.getEmail());
    }


    public Login FindByLogin(Login login) {
        return loginDao.FindByLogin(login);
    }


    public List<Login> getAll() {

        return loginDao.findAll();
    }


    public Login getUserAccessLoginPass(String login, String password) {
        return loginDao.getUserAccessLoginPass(login, password);
    }


    public void update(Login login) {
         loginDao.save(login);

    }

当我运行此代码时,确实向我显示了以下错误。

package com.example;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.br.suppcomm.ocp.service.LoginService;


@RunWith(SpringRunner.class)

@SpringBootTest
public class OcpJpaApplicationTests {

    @Autowired LoginService loginService;

    @Test
    public void contextLoads() {


    }    

}
  

创建名为'loginService'的bean时出错:不满意的依赖项   通过字段'loginDao'表示:没有类型为

的限定bean      

[com.br.suppcomm.ocp.dao.LoginDao]找到依赖项   [com.br.suppcomm.ocp.dao.LoginDao]:预计至少有1个bean   有资格作为此依赖项的autowire候选者。依赖   注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)};   嵌套异常是   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   找到[com.br.suppcomm.ocp.dao.LoginDao]类型的限定bean   依赖[com.br.suppcomm.ocp.dao.LoginDao]:预计至少为1   bean有资格作为此依赖项的autowire候选者。   依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}

我不知道发生了什么!!请。

4 个答案:

答案 0 :(得分:1)

请将classes属性添加到@SpringBootTest注释中,如下所示:

@SpringBootTest(classes = {Application.class})

这样就知道它必须进行你在Application课程中指定的组件扫描等。

答案 1 :(得分:1)

添加@Repository你的界面
注释,以便它可以自动装配。

@Repository
public interface LoginDao extends JpaRepository<Login, Long>{

}

它会这样工作! 例外情况说SPring无法找到一个限定符,而是自动装配你需要对它进行类型化的东西。

答案 2 :(得分:0)

在LoginDao上添加@Repository注释

答案 3 :(得分:0)

您需要将此注释添加到测试中:

@DataJpaTest

这将导致应用程序的Persistence切片被初始化。