首页 > 解决方案 > 如何将自定义 setContent 方法添加到 Spring Content

问题描述

我正在使用 Spring Content https://paulcwarren.github.io/spring-content/ 来管理文件。有我用来设置内容的方法

public interface ContentStore<S, SID extends Serializable> extends ContentRepository<S, SID> {

@LockParticipant
void setContent(S property, InputStream content);

问题是我想创建一个自定义方法

void setArchivedContent(S property, List<Resource> resources);

这应该将 ZIP 资源放到一个文件中。所以我创造了

public interface ArchiveStore<S, SID extends Serializable> extends ContentRepository<S, SID> {

在实现标准方法的地方实现它并为Store添加接口

public class GoogleCloudStoreImpl<S, SID extends Serializable>
implements Store<SID>, AssociativeStore<S, SID>, ContentStore<S, SID>, ArchiveStore<S, SID> 

public interface MyEntryArchiveStore extends ContentStore<MyEntryArchive, UUID>,
AssociativeStore<MyEntryArchive, UUID>, ArchiveStore<MyEntryArchive, UUID> {

当我运行代码并尝试触发该方法时,我遇到了一个问题:Spring 找不到该方法的实现。但它在 GoogleCloudStoreImpl

标签: javaspringspring-bootspring-content-community-project

解决方案


Spring Content 支持与存储库的 Spring Data 相同的 store 可组合性。因此,如果您想使用其他方法来装饰您的内容存储,您可以:

  • 创建您的自定义接口和实现类
interface ArchiveStore<S> {
  void setArchivedContent(S property, List<Resource> resources);
}
package com.examples.archival;

public class ArchiveStoreImpl<S> implements ArchiveStore<S> {
  public void setArchivedContent(S property, List<Resource> resources) {
     ...
  } 
}
  • 让你正规的内容商店实现上面的接口
package com.example.mystores;

interface MyStore extends ContentStore<MyEntity, UUID> extends ArchiveStore<MyEntity> {}
  • 通过将实现所在的包添加到 @EnableXXXStores 注释中,确保商店 bean 工厂可以找到您的实现类。
@Configuration
@EnableFilesystemStores(basePackages={"com.example.mystores", "com.examples.archival"})

推荐阅读