2017-01-05 8 views
0

Beanを初期化し、特定のBeanにJPAリポジトリを注入するのに問題があります。このインタフェースを実装Springブートで抽象クラスを継承するクラスにBeanを挿入していません

public interface KeyService { 
    Store getKeyStore(); 
    Store getTrustStore(); 
} 

abstractクラス:

public abstract class DefaultKeyService implements KeyService { 

     abstract KeyRecord loadKeyStore(); 
     abstract KeyRecord loadTrustStore(); 

    /* rest omitted... */ 

     } 

とベースclass延びるinterfaceキーサービスの定義があり、それが動作しない理由を全くわからない...

抽象クラス:

@Service 
      public class DatabaseKeyService extends DefaultKeyService { 

      @Autowired 
       private KeyRecordRepository keyRecordRepository; 

    @Override 
     protected KeyRecord loadKeyStore() { 
      return extract(keyRecordRepository.findKeyStore()); 
     } 

     @Override 
     protected KeyRecord loadTrustStore() { 
      return extract(keyRecordRepository.findTrustStore()); 
     } 

     /* rest omitted... */ 

      } 

bean初期化:

public interface KeyRecordRepository extends Repository<KeyRecord, Long> { 

    KeyRecord save(KeyRecord keyRecord); 

    @Query("SELECT t FROM KeyRecord t WHERE key_type = 'KEY_STORE' AND is_active = TRUE") 
    Iterable<KeyRecord> findKeyStore(); 

    @Query("SELECT t FROM KeyRecord t WHERE key_type = 'TRUST_STORE' AND is_active = TRUE") 
    Iterable<KeyRecord> findTrustStore(); 

    KeyRecord findById(long id); 
} 

質問keyRecordRepositoryDatabaseKeyService内のクラスは、まだヌルである理由いくつかの理由がある

@Bean 
    public KeyService keyService() { 
     return new DatabaseKeyService(); 
    } 

これはKeyRecordRepositoryリポジトリですか?本当に私はなぜこのフィールドだけが注入されていないか分かりません。他の豆とリポジトリは完全にうまく動作します。

親クラスは抽象クラスなので問題ありませんか?

+0

注釈をあなたの設定ファイルに次に

public DatabaseKeyService(KeyRecordRepository keyRecordRepository) { this.keyRecordRepository = keyRecordRepository; } 

DatabaseKeyService

に@Component –

+0

とKeyRecordRepositoryの実装を、それを作成するコンストラクタ・インジェクションを使用して好む 'KeyRecordRepository'は何の実装を持っていません。 – Artegon

答えて

0

DatabaseKeyServiceには、Spring管理対象Beanとして@Componentアノテーションを付ける必要があります。

+0

私はアノテーション「@サービス」を持っています - 言及するのを忘れました。 – Artegon

+0

Springブートメインクラスに@EnableAutoConfigurationがありますか? –

0

問題は、DatabaseKeyServiceクラスのBeanが2つあることに関連しています。設定クラスからの1つ - @Beanアノテーションと@Serviceアノテーションからの2番目。

は、おそらくあなたが@Serviceで注入

@Bean 
    public KeyService keyService() { 
     return new DatabaseKeyService(); 
    } 

を削除する際の作業になります。

@Beanを使用する場合は、KeyRecordRepositoryを追加する必要があります。私はまず

//other 
@Autowired 
    private KeyRecordRepository keyRecordRepository; 
@Bean 
    public KeyService keyService() { 
     return new DatabaseKeyService(keyRecordRepository); 
    } 
関連する問題