在通常的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?
答案 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的特殊方式。