在我的网络应用程序中,我有两个不同的数据存储 - 数据库和文件。在application.properties
我可以设置我想要使用的那个。我使用Spring Data JPA
从db访问对象,因此我的DataBaseRepository
扩展了CrudRepository
。
我想在Service
图层中注入一个Repository的接口,并且
实现将取决于所选的配置文件(在application.properties中)。
问题是我的FileRepository
没有实现CrudRepository
,因此我的存储库没有注入的常用界面。
方法1 :假设我的FileRepository
扩展CrudRepository
(我用@NoRepositoryBean
标记FileRepository)
问题:我FileRepository
的实施必须实施许多我不需要的方法(我不知道这是否是正常的方法,并且它是有效的)
方法2 :不要使用CrudRepository
界面
问题:编写许多样板代码
所以,请告诉我其他方法,如果它们存在于这种情况下,或者说哪一种更好。任何帮助表示赞赏。
答案 0 :(得分:2)
您可以创建一个扩展CrudRepository和BaseRepository的CustomCrudRepository .BaseRepository接口包含任何实现都必须支持的每个方法。很可能从CrudRepository复制签名。比基于BaseRepository注入。
很难解释所以请参阅以下没有泛型的示例。您可以自己添加它们。
public interface BaseRepo {
// common methods
long count();
...
}
@NoRepositoryBean
interface CustomCrudRepository extends CrudRepository, BaseRepo {
}
interface EntityRepository extends CustomCrudRepository {
}
class FileRepository implements BaseRepo {
@Override
public long count() {
return 0;
}
}
@Service
class SomeService {
@Autowired
private BaseRepo repo;
}