2016-11-15 4 views
0

私はSpringBootとJPAで作業しています。完了できなかった@Autowiredのエラーが表示されます。SpringBoot CRUDリポジトリのオートワイヤ化に失敗する

これは私のメインクラスです:失敗し

package com; 

@SpringBootApplication 
@EnableJpaRepositories(basePackages="com.repository") 
public class InitBatch implements CommandLineRunner { 

    @Autowired 
    private Batch batch; 

    @Autowired 
    private CareDao careDAO; 


    @Override 
    public void run(String... args) throws Exception { 
     careDAO.setMessageSource(messageSource());  
     batch.processFiles(); 
    } 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(InitBatch.class, args).close(); 
     System.out.println("Finish"); 
    } 


    @Bean 
    public ReloadableResourceBundleMessageSource messageSource() { 
     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 

     messageSource.setBasename("file:/config/instances"); 
     messageSource.setCacheSeconds(100); 
     return messageSource; 
    } 
} 

この私のクラス:

package com.repository; 
public interface RequestLogDao extends CrudRepository<RequestLog, Integer> { 

} 

これは、エラーメッセージは次のとおりです:

package com.logger.impl; 

@Configuration 
@ComponentScan({"com.repository"}) 

@Component 
public class RequestLoggerImpl implements RequestLogger { 

    @Autowired 
    private RequestLogDao requestLogDao; 

} 

これはRequestLogDaoクラスです

名前 'requestLoggerImpl'を持つBeanの作成中にエラーが発生しました:自動依存依存の注入が失敗しました。

フィールドをautowireできませんでした:private com.repository.RequestLogDao com.logger.impl.RequestLoggerImpl.requestLogDao;ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:[com.repository.RequestLogDao]タイプの適格なBeanが依存関係で見つかりませんでした:この依存関係のautowire候補となる少なくとも1つのbeanが必要です。依存関係の注釈:{@ org.springframework.beans.factory.annotation.Autowired(必須= true)}

なぜ私はそれがautowireできないのか分かりません。私はメインクラスに@EnableJpaRepositoriesを追加しようとしましたが、これはうまくいきませんでした。助言がありますか?前もって感謝します!

+3

開始するには、 'RequestLoggerImpl'に' @ Configuration'というアノテーションを付けるべきではありません。これは設定クラスではなくサービスBeanです。 – chrylis

答えて

1

を追加しているあなたが置かれてきたので、最初の

package com.logger.impl; 

@Component 
public class RequestLoggerImpl implements RequestLogger { 

    @Autowired 
    private RequestLogDao requestLogDao; 

} 

をスキャン構成とコンポーネントを削除@Configurationでは、configクラスが必要なので、次のように作成することができます。

ここにベースパッケージを書き留めておきます。それがために使用されますよう:

package com.repository; 

@Repository 
public interface RequestLogDao extends CrudRepository<RequestLog, Integer> { 

} 
自分のメインクラスの最後に

@SpringBootApplication // scan base packages for autowiring as needed 
public class InitBatch implements CommandLineRunner { 
... 
} 

最後に、あなたの依存関係を確認してください。

-3

RequestLogDaoを実装する具象クラスがありますか?私はそれを見ない。

1つ(Javaクラス)が必要です。そのインスタンスをアプリケーションコンテキストで使用可能にする必要があります。

+0

彼はSpring Data JPAを使用しているため、実装は必要ありません。 – luboskrnac

+0

彼の質問に含まれているコードには、アプリコンテキスト内に 'RequestLogDao'を実装するライブオブジェクトが存在することはありません。 –

+0

あなたの宿題をして、Spring Data JPAのドキュメントを読んでください。 – luboskrnac

1

はRequestLoggerImpl

から

@Configuration 
@ComponentScan({"com.repository"}) 

の両方を削除し、メインクラスから@EnableJpaRepositories(basePackages="com.repository")を削除します。直接comパッケージの下

にメインクラスを移動し、私が想定し、あなたは、spring-boot-starter-data-jpa依存関係があなたの要求ロガーについて

関連する問題