2

私は、Springデータリポジトリを動的に生成できるように、Springデータの上に構築されたライブラリを作成しています。私は、Spring Data抽象化で動作するこのプロセスの汎用ラッパーを作成したいと考えていました。動的にSpringデータリポジトリを生成する

クラスパスの例に追加されたどのような依存関係に応じて、この方法:spring-data-jpaまたはspring-data-mongodb私はリポジトリを生成し、私の春のコンテキストにそれらを注入することができるでしょう。

これを行う方法について、適切な文書を見つけるのが難しかったです。何か案は?

+0

私は春のブーツはあなたのためにそれを意味します。それを使わない理由は何ですか? – Veeram

答えて

3

Springはクラスパスに応じてどのBean/Configurationを選択するかを制御するための@Conditionalアノテーションを提供します(spring-bootの自動設定と同様)。

クラスパスに基づいて2つの構成クラスを定義することができます。 例:クラスパス上JPAの存在のため

  1. 設定のようになります。

    @Configuration 
    @EnableJpaRepositories(basePackages=...) 
    @Conditional(JpaClassPathCondition.class) 
    public class JpaAutoConfiguration { 
    
        static class JpaClassPathCondition implements Condition { 
    
         @Override 
         public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 
          return ClassUtils.isPresent("javax.persistence.EntityManager", JpaAutoConfiguration.class.getClassLoader()); 
         } 
        } 
    } 
    
  2. 設定ためにMongoDB

    @Configuration 
    @EnableMongoRepositories(...) 
    @Conditional(MongoClassPathCondition.class) 
    public class MongoAutoConfiguration { 
    
        static class MongoClassPathCondition implements Condition { 
    
         @Override 
         public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 
          return !ClassUtils.isPresent("javax.persistence.EntityManager", MongoAutoConfiguration.class.getClassLoader());)//or whatever classpath element fits you best 
    
         } 
        } 
    } 
    
    あなたはこのポイント前方からやらなければならないことは、あなたのモジュールの両方で設定クラスを使用してみましょう春、それは魔法

    だ行うことです

+0

これは私の大部分を得ています。素晴らしい例です!私が完全に理解していない最後の部分は、春のデータリポジトリを作成し、それを春のコンテキストに注入する方法です。例:mongodbがクラスパス上にある場合、N個のバネデータリポジトリを作成し、それらをバネアプリケーションコンテキストに挿入します。この問題は、spring-data-mongodb依存性に依存するリポジトリまたはクラスパスに依存するJPA依存性を作成することを意味します。 –

+0

リポジトリは、 '@ Enable..Repository'アノテーションが見つかると自動的に作成されます。 'Repository'インターフェース(' CrudRepository'、 'PagingAndSortingRepository')を実装しているすべてのBeanはSpringアプリケーションコンテキストに登録され、autowiringに利用できます。 –

+0

素晴らしいアレックス! –

関連する問題