将多个注释与参数合并



我在使用多个注释时有一个问题,这些注释都或多或少地说了相同的东西,但是对不同的框架,我想将它们全部分组为一个自定义注释。目前看起来像这样:

@Column(name = "bank_account_holder_name")
@XmlElement(name = "bank_account_holder_name")
@SerializedName("bank_account_holder_name")
@ApiModelProperty(name = "bank_account_holder_name", value = "The name of the recipient bank account holder")
public String bankAccountHolderName;

您可以看到它们都重复相同的字符串,我想结合它们,但是我还没有找到一种方法。

是否可以做到这一点,还是我必须继续执行此操作或更改/创建一个新框架?

答案是:可能 no,这是不可能的(使用" standard" java(。

您看到,没有 sentaritance 注释,更不用说"多倍"可以让您表达的继承:

public @interface MultiAnnotiation extends Column, XmlElement, ...

而且很可能是这样的,这些注释是这样工作的:在 runtime 相应的框架使用反射来检查某个对象是否具有该注释。如果找不到"它"注释,什么都没有发生。

因此,您需要一种神奇的方法。将这些注释插入您的类文件。

沸腾到:当您写自己的编译器并在Java上发明某些东西时,您可以做这样的事情。

处理compiler-plugins随附的注释时,情况可能会有所不同(含义:在编译时处理的注释(。也许您可以编写自己的自定义注释,然后触发相同的编译时间操作。

长话短说:所有这些听起来有趣的,而是高级,很可能:不会产生强大的,值得生产的代码!

可以将一些注释合并到一个注释中。例如,弹簧在Springbootapplication-Notation中进行:

/**
 * Indicates a {@link Configuration configuration} class that declares one or more
 * {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration
 * auto-configuration} and {@link ComponentScan component scanning}. This is a convenience
 * annotation that is equivalent to declaring {@code @Configuration},
 * {@code @EnableAutoConfiguration} and {@code @ComponentScan}.
 *
 * @author Phillip Webb
 * @since 1.2.0
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
    /**
     * Exclude specific auto-configuration classes such that they will never be applied.
     * @return the classes to exclude
     */
    Class<?>[] exclude() default {};
}

,但我不知道是否可以从合并的注释中为内部注释设置值。

您实际上可以做到这一点(至少我用于测试算盘(。

从这里检查文章:https://www.swtestacademy.com/how-to-merge-mertiple-annotations-in-java/

只需创建一个新的@interface,包括您需要的注释。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Column(name = "bank_account_holder_name")
@XmlElement(name = "bank_account_holder_name")
@SerializedName("bank_account_holder_name")
@ApiModelProperty(name = "bank_account_holder_name", value = "The name of the recipient bank account holder")
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCoolAnnotation {
}

相关内容

  • 没有找到相关文章

最新更新