2016-09-09 7 views
0
package lokesh.repository; 

import org.springframework.data.cassandra.repository.Query; 
import org.springframework.data.repository.Repository; 
import org.springframework.data.repository.query.Param; 
import com.model.User; 

@org.springframework.stereotype.Repository 
public interface UserOverview extends Repository<User, Integer>{ 

    @Query("select count(*) from users where name = :userName ") 
    int overview(@Param("userName") String userName); 

} 

サービス春データカサンドラ:インタフェースのオートワイヤリングは、私が書き込みにカスタムクエリをしようとしています

package lokesh.service; 

public UserService(){ 
    @Autowired 
    private UserOverview userOverview; //Injection of autowired dependencies failed 
} 

メイン

package lokesh; 

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
public class UserApplication extends SpringBootServletInitializer { 

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(UserApplication.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(UserApplication.class, args); 
    } 

} 

に失敗しました。私は春のデータリポジトリを拡張するインターフェイスを作成しました。私はそのインターフェイスでメソッドを呼び出すために、そのインターフェイスをサービスクラスで使用したいと思います。私は依存性に失敗しました例外があります。誰かが私のミスを見つけることができます

+0

'は、リポジトリには必要ありません。クラスパスにSpring Data CassandraのようなSpring Data Moduleがあるとすぐに、そのデータが取得されます。オートワイヤリングは、インフラストラクチャの問題(接続に失敗し、テーブルが見つからないため)でも発生する可能性があります。そのため、スタックトレース全体を確認すると便利です。 – mp911de

+0

何らかの理由でstacktraceを投稿できません。それは "入れ子になった例外はorg.springframework.beans.factory.NoSuchBeanDefinitionException"のためです。同じディレクトリには春にスキャンされる他のいくつかの豆があります。 Springは単独でインタフェースをインスタンス化できますか? –

+0

Springデータは、インタフェースを実装するプロキシを作成し、そのインスタンスをBeanとして提供します。 – mp911de

答えて

0

あなたの@Configurationクラスとあなたのケースでは、メインメソッドを持つクラスを分けることをお勧めします。

@Configurationクラスの中に注入するには、@Beanアノテーションを注入するように豆にマークする必要があります。

しかし、あなたは自動配線しようとしている豆である@Repository注釈を持っていると思います。

@ComponentScanにパッケージ文字列を追加して、@Repositoryクラスを自動配線の対象となるBeanとして識別できるようにしてください。このよう:一方

@ComponentScan("com.package.to.scan") 

、インタフェースは、それが実際のインスタンスではない、豆として機能することができません。注意してください。

0

UserApplicationクラスでは、明示的なパッケージ名を指定せずにComponentScan注釈を使用しています。

UserOverviewクラスのパッケージ名を指定してください。このよう :org.springframework.stereotype.Repository` @

@ComponentScan("lokesh.repository") 
関連する問題