Spring数据gemfire中GemfireRepository和CrudRepository之间有什么区别

时间:2014-06-26 15:33:23

标签: spring-data-gemfire

GemfireRepository是CrudRepository的gemfire特定实现,但是spring数据gemfire参考指南说如果我们使用GemfireRepository那么我们需要 让我们的域类正确地映射到配置区域,因为底部过程会 否则..这意味着我们需要在域类上使用@Region注释?如果我们使用CrudRepository,那么不需要@Region注释,因为CrudRepository不依赖于Region?

所以我使用的是GemfireRepository,我将一个cacheloader配置为插件到一个区域,而cacheloader依赖于GemfireRepository来从RDBMS获取数据。所以根据参考文档,如果GemfireRepository内部依赖于Region ..那么这会创建一个循环依赖吗?

1 个答案:

答案 0 :(得分:0)

SDG GemfireRepository接口扩展了SDC的CrudRepository接口并添加了几个方法(findAll(:Sort)和一个重载的save(:Wrapper):T方法),参见...

http://docs.spring.io/spring-data-gemfire/docs/current/api/org/springframework/data/gemfire/repository/GemfireRepository.html

GemfireRepository接口是"支持"通过SimpleGemfireRepository类。

您的特定于应用程序的Repository接口是扩展GemfireRepository还是CrudRepository,甚至只是org.springframework.data.repository.Repository,这并不重要。扩展框架提供的Repository接口仅确定" Proxy"在后备实现中将公开哪些方法。用框架创建。

E.g。如果你想创建一个只读的Repo,你可以直接扩展org.springframework.data.repository.Repository,并只复制"只读"从CrudRepository接口到特定于应用程序的Repository接口的方法(例如findOne(:ID),findAll(),exists(:ID),即没有数据存储变异方法,例如save(:S):S)。

但是,通过在Spring配置中使用namespace元素,您指示框架使用SDG的Repository基础结构来处理应用程序域对象到GemFire,特别是区域的持久操作。因此,应用程序域对象必须使用@Region进行注释,或者现在,如果您希望应用程序域对象需要存储在GemFire的多个区域中,SDG允许使用@Region对应用程序存储库接口进行注释。有关详细信息,请参阅SDG参考指南中的8.1,实体映射。

http://docs.spring.io/spring-data-gemfire/docs/1.4.0.RELEASE/reference/html/mapping.html#mapping.entities

关于"循环依赖" ...是,它创建了循环依赖...

区域A - > CacheLoader A - > ARepository - > A区。

并将导致......

org.springframework.beans.factory.BeanCurrentlyInCreationException

你需要打破这个循环。