带有数组元素的Java自定义注释

前端之家收集整理的这篇文章主要介绍了带有数组元素的Java自定义注释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@

我有一个自定义注释如下.

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE,ElementType.METHOD })
@Documented
@Conditional(OnApiVersionConditional.class)
public @interface ConditionalOnApiVersion {

    int[] value() default 5;

    String property();
}

OnApiVersionConditional是,

public class OnApiVersionConditional implements Condition {

  @Override
    public boolean matches(final ConditionContext context,final AnnotatedTypeMetadata Metadata) {
        final MultiValueMapMetadata.getAllAnnotationAttributes(ConditionalOnApiVersion.class.getName());

       attributes.get("value");


        final String inputVersion = context.getEnvironment().getProperty("userInputVersion");


    }

在我的Bean注释中,

  @Bean
  @ConditionalOnApiVersion(value = {6,7},property = "userInputVersion")

还有像单一版本匹配的bean

@Bean
@ConditionalOnApiVersion(value = 8,property = "userInputVersion")

我想验证属性文件中的userInput版本到可用的Beans支持版本.不确定,如何获取值,迭代并与userInoutVersion进行比较.该值可以是8或{6,7}作为int数组.不确定,如何迭代该值以检查是否有任何值与输入版本匹配.

final List apiVersions = attributes.get(“value”).stream().collect(Collectors.toList());

题:

如何迭代attributes.get(“value”)并与userInputVersion进行比较?

attributes.get(“value”)返回一个Object列表.

我试过下面的代码,

final List

但得到以下错误在第二行anyMatch,

java.lang.ClassCastException: [I cannot be cast to java.lang.Integer

谢谢

最佳答案
您已经定义了一个使用Spring的@Conditional的良好自定义注释,如果数组值中存在名为“property”的属性,则此过程将仅创建bean.

注释定义了这两个变量如下:

> value:int [](一个或多个受支持的版本)
> property:String(要比较的属性名称)

当您使用元数据检索这些值时,Spring会将它们作为对象返回.将这些对象转换为您定义它们的类型是关键步骤.不需要流,因为迭代int []数组是微不足道的.

我测试了各种形式的注释(值= 5,值= {6,7}等)并发现以下代码运行良好(仅在版本正确时才创建@Conditional bean).

public class OnApiVersionConditional implements Condition {

@Override
public boolean matches(final ConditionContext context,final AnnotatedTypeMetadata Metadata) {

    final MultiValueMapMetadata
            .getAllAnnotationAttributes(ConditionalOnApiVersion.class.getName());

    // 1.  Retrieve the property name from the annotation (i.e. userInputVersion)
    List

通过验证属性和值可以改进这种方法;如果其中任何一个包含错误/空值等,则返回false.

猜你在找的Spring相关文章