不满意的独立性异常:创建带有名称的 Bean 时出错

2022-08-31 11:34:22

几天来,我正在尝试创建Spring CRUD应用程序。我很困惑。我无法解决此错误。

org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为'clientController'的bean时出错:通过方法'setClientService'参数0表示的不满意的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为 'clientService' 的 bean 时出错:通过字段 'clientRepository' 表示的不满意的依赖关系;嵌套的例外是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的 'com.kopylov.repository.ClientRepository' 类型的合格 bean:预期至少有 1 个 bean 有资格作为自动布线候选项。Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

和这个

org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为'clientService'的bean时出错:通过字段'clientRepository'表示不满意的依赖关系;嵌套的例外是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的 'com.kopylov.repository.ClientRepository' 类型的合格 bean:预期至少有 1 个 bean 有资格作为自动布线候选项。Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

客户端控制器

@Controller
public class ClientController {
private ClientService clientService;

@Autowired
@Qualifier("clientService")
public void setClientService(ClientService clientService){
    this.clientService=clientService;
}
@RequestMapping(value = "registration/add", method = RequestMethod.POST)
public String addUser(@ModelAttribute Client client){
    this.clientService.addClient(client);
return "home";
}
}

客户端服务说明

@Service("clientService")
public class ClientServiceImpl implements ClientService{

private ClientRepository clientRepository;

@Autowired
@Qualifier("clientRepository")
public void setClientRepository(ClientRepository clientRepository){
    this.clientRepository=clientRepository;
}



@Transactional
public void addClient(Client client){
    clientRepository.saveAndFlush(client);
}
}

客户端存储库

public interface ClientRepository extends JpaRepository<Client, Integer> {

}

我看了很多类似的问题,但没有一个答案可以帮助我。


答案 1

客户端存储库应使用标记进行批注。使用您当前的配置,Spring不会扫描类并了解它。在引导和连接时,找不到 ClientRepository 类。@Repository

编辑如果添加标记没有帮助,那么我认为问题现在可能出在 and .@RepositoryClientServiceClientServiceImpl

尝试使用 注释 (接口) 。由于服务应该只有一个实现,因此无需使用可选参数 指定名称。Spring将根据接口的名称自动生成它。ClientService@Service@Service("clientService")

此外,正如 Bruno 所提到的,在 中不需要,因为您只有一个服务实现。@QualifierClientController

客户服务.java

@Service
public interface ClientService {

    void addClient(Client client);
}

客户端服务.java(选项 1)

@Service
public class ClientServiceImpl implements ClientService{

    private ClientRepository clientRepository;

    @Autowired
    public void setClientRepository(ClientRepository clientRepository){
        this.clientRepository=clientRepository;
    }

    @Transactional
    public void addClient(Client client){
        clientRepository.saveAndFlush(client);
    }
}

客户端服务.java(选项 2/首选)

@Service
public class ClientServiceImpl implements ClientService{

    @Autowired
    private ClientRepository clientRepository;

    @Transactional
    public void addClient(Client client){
        clientRepository.saveAndFlush(client);
    }
}

客户端控制器.java

@Controller
public class ClientController {
    private ClientService clientService;

    @Autowired
    //@Qualifier("clientService")
    public void setClientService(ClientService clientService){
        this.clientService=clientService;
    }

    @RequestMapping(value = "registration", method = RequestMethod.GET)
    public String reg(Model model){
        model.addAttribute("client", new Client());
        return "registration";
    }

    @RequestMapping(value = "registration/add", method = RequestMethod.POST)
    public String addUser(@ModelAttribute Client client){
        this.clientService.addClient(client);
    return "home";
    }
}

答案 2

我知道这似乎为时已晚,但它将来可能会帮助其他人。

我遇到同样的错误,问题是弹簧启动没有读取我的服务包,所以添加:

@ComponentScan(basePackages = {"com.example.demo.Services"})(您必须指定自己的服务包路径),并且在类(具有 main 函数的类)和服务接口中必须进行注释,并且必须用 注释实现服务接口的类,然后自动连接服务接口。demoApplication@Service@Component


推荐