我有一个使用多个注释的问题,所有注释都说或多或少是相同的东西,但不同的框架,我想将它们全部组合成一个自定义注释。目前它看起来像这样:
@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;
正如你所看到的,他们都重复相同的字符串,我想将它们结合起来,但我还没有找到一种方法。
是否可以这样做,或者我是否必须继续这样做或更改/创建新框架?
答案 0 :(得分:3)
答案是:可能不,这是不可能的(使用"标准" java)。
你知道,注释中没有 inheritance ,但是单独的"多个"继承,这将允许你表达:
public @interface MultiAnnotiation extends Column, XmlElement, ...
最有可能的是,这些注释的工作原理如下:在运行时,相应的框架使用反射来检查某个对象是否具有该注释。如果它没有找到"它的"注释,没有任何反应。
所以你需要一种方法来神奇地"将这些注释插入到您的类文件中。
归结为:当你编写自己的编译器,并在java之上发明一些东西时,你可以做类似的事情。
在处理编译器插件附带的注释时可能会有所不同(意思是:在编译时处理的注释)。也许您可以编写自己的自定义注释,然后触发相同编译时操作。
长话短说:所有这些都是有趣的,而是高级,而且最有可能的是:不会产生强大的,具有生产价值的代码!
答案 1 :(得分:1)
可以将一些注释合并到一个注释中。例如,Spring在SpringBootApplication-Annotation中执行它:
/**
* 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 {};
}
但我不知道是否可以从合并注释中为内部注释设置值。