2017-05-25 7 views
1

通常のSpring MVCでは、さまざまなSpringプロファイル用のこのインタフェースのいくつかの実装と共にDaoインタフェースを作成できます。しかし、私がSpringデータを実装したいのであれば、その実装をどのように作成するのかという問題があります。 hereと記載されているカスタムリポジトリを追加するという考えは、この問題を決して解決しません...Springデータ:いくつかの実装

例。 ダオ:

public interface DaoExample extends JpaRepository<User, Long>, DaoExampleCustom { 
} 

DaoCustom:

public interface DaoExampleCustom { 

    void someMethod(User user); 
} 

DaoExampleImpl:

@Profile("someProfile") 
public class DaoExampleImpl implements DaoExampleCustom { 
    @Override 
    public void someMethod(User user) { 

    } 
} 

DaoExampleとDaoExampleImplは異なるプロファイルに属しますが、このコードは、起動に失敗します。さらに、異なるプロファイル用に複数のDaoExampleImplを作成する場合はどうすればよいですか? DaoExampleImpl1、DaoExampleImp2などのように名前を付ける必要がありますが、これはSpring Dataの命名規則に違反します。複数のSpringプロファイル用にDAOレイヤーを作成する必要がある場合は、Spring Dataをまったく使用しないでください。

+0

私は要件を十分に理解していません。あなたは 'public interface DaoExample extends JpaRepository 、DaoExampleCustom'を追加できませんか? – StanislavL

+0

申し訳ありませんが、これをコード例に追加するのを忘れてしまいました。私はテキストを修正しました。 – sva605

答えて

2

私が正しくあなたを理解していれば、あなたはあなただけの別々のパッケージにそれらを配置し、所望のプロファイルに応じて、必要なパッケージが含まれるように、パッケージのスキャンを適応させることはできません複数のDaoExampleImplクラス

@Profile("someProfile") 
public class DaoExampleImpl implements DaoExampleCustom 

@Profile("someProfile2") 
public class DaoExampleImpl implements DaoExampleCustom 

を必要としています。したがって、Springのデータ命名規則は安全で、異なる実装を使用することができます。ちょうどアイデア。

+0

それはうまくいくかもしれませんが...最終的には、SpringデータなしのDAO層の作成よりも難しくなります。だから、私はSpring Dataを使うという考え方は、唯一の "実装"の場合でも意味があると思います。それ以外の場合は避けるべきです – sva605

0

恐らくそれを機能させるためのハックがあります。 @StanslavLによって提案されたものが動作するはずです。

代わりに、実装をBeanとして登録することができます。Springデータが見つけたクラスより優先して登録する必要があります。

https://jira.spring.io/browse/DATACMNS-764は、異なるプロファイルに置くことができる別の `repositoryImplementationPostfix 'を使用して同様の問題と回避策を示します。

しかし、これらのアプローチはすべて私にとって本当に魅力的ではありません。代わりに、私は単一の実装クラスを提供し、実際の作業を別のBeanに委譲します。これはプロファイルを使用して切り替えることができます。この方法では、Spring Dataがその特殊なやり方に依存することはありません。

関連する問題