java - 批注作为另一个批注的快捷方式

标签 java mongodb elasticsearch spring-annotations spring-data-elasticsearch

我同时使用Spring数据Mongodb和Elasticsearch并实时同步它们。
我在两种情况下都使用相同的Spring实体,如下所示:

// imports and stuff
@Document(collection="something")
@org.springframework.data.elasticsearch.annotations.Document(indexName = "something")
public class MySomething {
// class definition...
效果很好...我的问题是我想用“快捷方式”注释(例如@ElasticDocument)替换elasticsearch注释的标准名称。
一种解决方案是将@Doucment完全复制到新的注释中,然后使用新的注释覆盖它的多种用法=>这将创建大量不必要的代码(考虑到我将不得不覆盖多个Spring数据elasticsearch配置类)。审美原因!
还有另一个更优雅的解决方案吗?其中一项涉及“重命名” @Document或为其创建快捷方式注释?
考虑到Java中@interface多态性是不可能的,我似乎没有想到合适的解决方案。

最佳答案

不太确定这是否是正确的答案,但是您是否考虑过看一下Spring的@AliasFor注释?这可能是您要寻找的。例如,您可以尝试这样的事情,看看它如何进行:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface ElasticDocument {

    @AliasFor(annotation = Document.class, attribute = "indexName")
    String indexName() default "";

    @AliasFor(annotation = Document.class, attribute = "type")
    String type() default "";

    @AliasFor(annotation = Document.class, attribute = "useServerConfiguration")
    boolean useServerConfiguration() default false;

    @AliasFor(annotation = Document.class, attribute = "shards")
    short shards() default 5;

    @AliasFor(annotation = Document.class, attribute = "replicas")
    short replicas() default 1;

    @AliasFor(annotation = Document.class, attribute = "refreshInterval")
    String refreshInterval() default "1s";

    @AliasFor(annotation = Document.class, attribute = "indexStoreType")
    String indexStoreType() default "fs";

    @AliasFor(annotation = Document.class, attribute = "createIndex")
    boolean createIndex() default true;

    @AliasFor(annotation = Document.class, attribute = "versionType")
    VersionType versionType() default VersionType.EXTERNAL;

}
注意,我没有测试上面的代码,但是您可以尝试一下,看看它如何进行。

关于java - 批注作为另一个批注的快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64450937/

相关文章:

java - 不必要的长正则表达式

java - 设置 JTextField 的对齐方式

java - kafkaProducer 第一次尝试发送记录时无法创建主题 INVALID_REPLICATION_FACTOR

ruby-on-rails - Mongoid 使用嵌入式哈希查找或创建

elasticsearch - Kibana,过滤计数大于或等于 X

java - 调用一个函数而不等待它

node.js - MongoDB更新语句设置其他集合中的值

python - 遍历字典以创建列表

c# - 如何使用 C# NEST 客户端将 post_filter 添加到 ElasticSearch 查询?

elasticsearch ttl vs 每日丢弃表