Spring Data:几个实现

时间:2017-05-25 13:43:54

标签: java spring-data

在通常的Spring MVC中,我可以为不同的Spring配置文件创建一个Dao接口以及该接口的几个实现。但是,如果我想实现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?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要多个DaoExampleImpl

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

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

您不能将它们放在单独的包装中,并根据所需的配置文件调整包装扫描以包含必要的包装。因此,Spring数据命名约定是安全的,您可以使用不同的实现。只是一个想法。

答案 1 :(得分:0)

可能会有黑客攻击它。 @StanslavL提出的那个应该有效。

另一种方法是将实现注册为Bean,我认为应该优先于Spring Data找到的类,它必须自己注册。

https://jira.spring.io/browse/DATACMNS-764描述了一个类似的问题和使用不同`repositoryImplementationPostfix'的解决方法,您可以将其放在不同的配置文件中。

但所有这些方法并不真正吸引我。相反,我会提供一个实现类,然后将实际工作委托给另一个bean,您可以使用配置文件切换。这样您就不依赖于Spring Data的特殊方式。