2017-05-25 57 views
1

在通常的Spring MVC我可以創建這個接口不同春譜的幾種實現沿道接口。但是,如果我想實現Spring Data,那麼存在一個問題:如何創建這些實現?添加自定義庫的想法,描述here,從來沒有解決這個問題...春數據:幾種實現

例。 道:

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

我不完全瞭解這些要求。你不能只添加'公共接口DaoExample擴展JpaRepository ,DaoExampleCustom'嗎? – StanislavL

+0

對不起,我忘了將它添加到代碼示例中。我已更正了文字。 – sva605

回答

2

如果我理解你正確,你需要多DaoExampleImpl

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

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

你就不能將它們放置在一個單獨的封裝和適應包裝掃描根據所需的個人資料,包括必要的包。因此,Spring數據命名約定是安全的,您可以使用不同的實現。只是一個想法。

+0

這可能會起作用,但是......最終它看起來比創建沒有Spring Data的dao層更加困難。所以,我認爲只有在「實現」的情況下,使用Spring Data的想法纔有意義。否則應該避免 – sva605

0

有可能是黑客,使其工作。 @StanslavL提出的那個應該可以工作。

另一種方法是註冊的實現作爲一個Bean,我認爲應該優先於春季數據,它必須將其自身註冊找到的類。

https://jira.spring.io/browse/DATACMNS-764描述了類似的問題,使用不同的`repositoryImplementationPostfix」你可以把不同的配置文件的解決方法。

但是,所有這些方法真的不吸引我。相反,我會提供一個實現類,然後將實際工作委託給不同的bean,您可以使用配置文件進行切換。這樣你就不依賴於Spring Data的特殊方式。