web-dev-qa-db-ja.com

UnsatisfiedDependencyException:名前付きのBeanの作成エラー

数日間、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が必要です。依存関係の注釈:{@ 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が必要です。依存関係の注釈:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

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

ClientRepository

public interface ClientRepository extends JpaRepository<Client, Integer> {

}

私は多くの同様の質問に目を通しましたが、それらに対する誰の回答も私を助けません。

37
kopylov

ClientRepositoryには、@Repositoryタグで注釈を付ける必要があります。現在の設定では、Springはクラスをスキャンせず、その知識を持ちません。起動と配線の時点では、ClientRepositoryクラスは見つかりません。

EDIT@Repositoryタグの追加が役に立たない場合、問題はClientServiceおよびClientServiceImplにある可能性があります。

ClientService(インターフェース)に@Serviceの注釈を付けてみてください。サービスの実装は1つだけにする必要があるため、オプションのパラメーター@Service("clientService")で名前を指定する必要はありません。 Springは、インターフェイスの名前に基づいて自動生成します。

また、ブルーノが言及したように、ClientControllerには@Qualifierは必要ありません。これは、サービスの実装が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";
    }
}
17
Alex Roig

これは、使用しているpojoに、サービスが必要とする正確なコンストラクターがないために起こる可能性があります。つまり、serviceClientが使用するpojoまたはオブジェクト(モデルオブジェクト)のすべてのコンストラクターを生成して、クライアントを正しくインスタンス化できるようにします。あなたの場合は、クライアントオブジェクトのコンストラクター(引数付き)を再生成します(tahtはモデルオブジェクトです)。

3
Ricuzzo

メインクラスの上に@EntityScan(basePackages = "ここにパッケージ名を挿入")を追加してみてください。

3
Shubham Chopra

Repositoryインターフェースに@Repository注釈を追加し、メインクラスに@EnableJpaRepositories( "domain.repositroy-package")を追加しました。うまくいきました。

1
Nesryna

Spring Bootを使用している場合、メインアプリは次のようにする必要があります(単純な方法で物事を作成して理解するため)。

package aaa.bbb.ccc;
@SpringBootApplication
@ComponentScan({ "aaa.bbb.ccc.*" })
public class Application {
.....

@Repositoryと@Serviceに適切な注釈が付けられていることを確認してください。

すべてのパッケージがaaa.bbb.ccc。*に該当することを確認してください

ほとんどの場合、このセットアップはこれらの種類の些細な問題を解決します。 ここ は本格的な例です。それが役に立てば幸い。

1
Ajay Kumar

パッケージのスキャンがXML構成または注釈ベースの構成のいずれかによって正しく設定されていることを考慮してください。

Springが@Repositoryで使用できるようにするには、ClientRepository実装にも@Autowiredが必要です。ここにはないので、それが欠落しているとしか想定できません。

補足として、セッターメソッドが@Autowiredにのみ使用される場合は、@Qualifier/@Autowiredをメンバーに直接配置する方が簡単です。

@Autowired
@Qualifier("clientRepository")
private ClientRepository clientRepository;

最後に、@Qualifierは必要ありません。Bean定義を実装するクラスは1つだけなので、ClientServiceおよびClientRepositoryを複数実装していない限り、@Qualifierを削除できます。

1
Bruno Delor

サービスクラスの先頭に@Serviceアノテーションを追加するだけです

0
erdikanik

非常に長いスタックトレースで、まったく同じ問題が発生しました。トレースの終わりに私はこれを見ました:

InvalidQueryException:キースペース「mykeyspace」は存在しません

私はcassandraでキースペースを作成し、問題を解決しました。

CREATE KEYSPACE mykeyspace
  WITH REPLICATION = { 
   'class' : 'SimpleStrategy', 
   'replication_factor' : 1 
  };
0
Kristóf Dombi

Configまたはcontext xmlファイルのいずれかが欠落しているかどうかを確認します

0
Himanshu Shukla

遅すぎるように思えますが、将来は他の人にも役立つかもしれません。

私は同じエラーに直面し、問題はスプリングブートが私のサービスパッケージを読み込まなかったということでしたので、追加します:

@ComponentScan(basePackages = {"com.example.demo.Services"})(サービスパッケージへの独自のパスを指定する必要があります)クラスdemoApplication(メイン関数を持つクラス)およびサービスインターフェイスには、注釈付きである必要があります@Serviceおよびサービスインターフェースを実装するには、@Componentアノテーションを付けてから、サービスインターフェースを自動配線する必要があります。

0

フィールドをメソッド定義( "findBy")の基準として記述する場合、そのパラメーターをメソッドに渡す必要があります。そうしないと、 "メソッドパラメーターで表現された依存関係が満たされていない"例外が発生します。

public interface ClientRepository extends JpaRepository<Client, Integer> {
       Client findByClientId();                ////WRONG !!!!
       Client findByClientId(int clientId);    /// CORRECT 
}

*クライアントエンティティにclientId属性があると仮定します。

0
ÖMER TAŞCI

@RepositoryアノテーションをSpring Data JPAリポジトリに追加します

0
Sergio

documentation に従って、XML設定を設定する必要があります。

<jpa:repositories base-package="com.kopylov.repository" />
0

それはレタスが含まれていたバージョンの非互換性でした。私が除外したとき、それは私のために働いた。

<!--Spring-Boot 2.0.0 -->
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>io.lettuce</groupId>
                        <artifactId>lettuce-core</artifactId>
                    </exclusion>
                </exclusions>    
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>
0
Vaibs

私は同じ問題に直面していましたが、DAOクラスにEntity注釈を付けるのを忘れていたためです。私は以下を試しましたが、エラーは解決しました。

/**
*`enter code here`
*/
@Entity <-- was missing earlier
    public class Topic {
        @Id  
        String id;
        String name;
        String desc;

    .
    .
    .
    }
0
Nitish Sharma

Clientテーブルのテーブル構造を確認してください。dbのテーブル構造とエンティティの間に不一致がある場合、このエラーが発生します。

Dbテーブルとエンティティ間のプライマリキーのデータ型の不一致が原因でこのエラーが発生しました...

0