1. ホーム
  2. java

[解決済み] UnsatisfiedDependencyException。名前を持つビーンの作成エラー

2022-03-12 11:51:25

質問

数日前から、Spring CRUDアプリケーションを作ろうとしています。私は混乱しています。 私はこのエラーを解決することはできません。

<ブロッククオート

org.springframework.beans.factory.UnsatisfiedDependencyException.UnsatisfiedDependencyException.UnsatisfiedDependencyException の略です。Error creating bean with name 'clientController': メソッド 'setClientService' パラメータ 0 で表される依存関係が満たされていません。ネストされた例外は org.springframework.beans.factory.UnsatisfiedDependencyException.UnsatisfiedDependencyException です。名前 'clientService' を持つ Bean の作成に失敗しました。また、このメソッドには、次のメソッドが含まれます。com.kopylov.repository.ClientRepository' タイプの修飾された Bean は利用できません。依存関係アノテーション。{を使用することで、この問題を解決できます。

そしてこれ

org.springframework.beans.factory.UnsatisfiedDependencyException.UnsatisfiedDependencyException.UnsatisfiedDependencyException の略です。名前 'clientService' を持つ Bean の作成に失敗しました。また、このような場合、"Next" をクリックすると、"Next" が表示されます。com.kopylov.repository.ClientRepository' タイプの修飾された Bean は利用できません。依存関係アノテーション。{を使用することで、この問題を解決できます。

ClientController

@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";
}
}

ClientServiceImpl

@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> {

}

同じような質問にたくさん目を通しましたが、どの回答も私を助けてくれません。

どのように解決するのですか?

ClientRepository には、アノテーションを付ける必要があります。 @Repository タグを使用します。 現在の設定では、Spring はこのクラスをスキャンして、それに関する知識を得ることはできません。起動時や配線時にClientRepositoryクラスが見つかりません。

EDIT を追加した場合 @Repository タグで解決しないのであれば、今のところ、問題は ClientServiceClientServiceImpl .

アノテーションを付けてみてください。 ClientService (インターフェース) を @Service . サービスの実装はひとつだけでよいので、オプションのパラメータである @Service("clientService") . Springはインターフェースの名前に基づいてそれを自動生成します。

また、ブルーノが言ったように @Qualifier は必要ありません。 ClientController サービスの実装は1つだけだからです。

ClientService.java

@Service
public interface ClientService {

    void addClient(Client client);
}

ClientServiceImpl.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);
    }
}

ClientServiceImpl.java (オプション2/優先)

@Service
public class ClientServiceImpl implements ClientService{

    @Autowired
    private ClientRepository clientRepository;

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

ClientController.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";
    }
}