在Spring

时间:2016-10-20 20:51:24

标签: java spring spring-boot spring-data

在我的网络应用程序中,我有两个不同的数据存储 - 数据库和文件。在application.properties我可以设置我想要使用的那个。我使用Spring Data JPA从db访问对象,因此我的DataBaseRepository扩展了CrudRepository

我想在Service图层中注入一个Repository的接口,并且 实现将取决于所选的配置文件(在application.properties中)。 问题是我的FileRepository没有实现CrudRepository,因此我的存储库没有注入的常用界面。

方法1 :假设我的FileRepository扩展CrudRepository(我用@NoRepositoryBean标记FileRepository)

问题:我FileRepository的实施必须实施许多我不需要的方法(我不知道这是否是正常的方法,并且它是有效的)

方法2 :不要使用CrudRepository界面

问题:编写许多样板代码

所以,请告诉我其他方法,如果它们存在于这种情况下,或者说哪一种更好。任何帮助表示赞赏。

1 个答案:

答案 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;
}