java - 如何将自定义 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
解决方案
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"})
推荐阅读
- excel - VBA,移动枢轴,无法获取数据透视表类的行范围属性
- java - DataTables:在渲染期间重新排列数组实体
- python - Python字符串转换,去掉空格,加连字符
- angular - Angular 6 - 检查图像 url 的 http 状态
- python - 在 Anaconda Spyder 中运行我的代码时出现 FailedPreconditionError
- java - 有没有办法通过使用 Intellij 添加外部方法调用来重构?
- javascript - 我应该在我的列表页面上的过滤器之前添加跳过链接吗?
- javascript - Javascript mongoDB 采用变量名而不是变量的值
- javascript - 如何在 php、ajax、javascript(无 jquery)中从数据库中删除数据
- java - 如何将数据集保存到 orc 文件的不同部分