我有一个自定义注释如下。
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnApiVersionConditional.class)
public @interface ConditionalOnApiVersion {
int[] value() default 5;
String property();
}
一个版本的条件是,
public class OnApiVersionConditional implements Condition {
@Override
public boolean matches(final ConditionContext context, final AnnotatedTypeMetadata metadata) {
final MultiValueMap<String, Object> attributes = metadata.getAllAnnotationAttributes(ConditionalOnApiVersion.class.getName());
attributes.get("value");
final String inputVersion = context.getEnvironment().getProperty("userInputVersion");
}
在我的豆子注释中,
@Bean
@ConditionalOnApiVersion(value = {6, 7}, property = "userInputVersion")
也有单版本匹配的bean,喜欢
@Bean
@ConditionalOnApiVersion(value = 8, property = "userInputVersion")
我想验证从属性文件到可用的Beans支持版本的userInput版本。不确定,我如何获取值,迭代并与userInoutVersion进行比较。值可以是8或{6,7}作为int数组。不确定,我如何迭代该值以检查是否有任何值与输入版本匹配。
最终列表apiVersions=属性。获取(“价值”)。stream()。collect(Collectors.toList());
问题:
如何迭代属性。获取(“值”)并与userInputVersion进行比较?
属性。get(“value”)返回一个对象列表。
我试过下面的代码,
final List<Object> apiVersions = attributes.get("value").stream().collect(Collectors.toList());
boolean result = apiVersions.stream().anyMatch(version -> (int)version == Integer.parseInt(userInputVersion));
但是在第二行anyMatch中得到下面的错误,
JAVAlang.ClassCastException:[我不能转换为java.lang.Integer
谢啦
您已经定义了一个很好的自定义注释,它使用Spring的@Conditional,这个过程只会在数组值中存在名为“property”的属性时创建bean。
注释对这两个变量的定义如下:
当您使用元数据检索这些值时,Spring会将它们作为对象返回。将这些对象转换为您定义的类型是一个关键步骤。不需要流,因为迭代int[]数组很简单。
我测试了各种形式的注释(value=5, value={6,7}等),发现下面的代码运行良好(只有在版本正确的情况下才创建条件bean)。
public class OnApiVersionConditional implements Condition {
@Override
public boolean matches(final ConditionContext context, final AnnotatedTypeMetadata metadata) {
final MultiValueMap<String, Object> attributes = metadata
.getAllAnnotationAttributes(ConditionalOnApiVersion.class.getName());
// 1. Retrieve the property name from the annotation (i.e. userInputVersion)
List<Object> propertyObject = attributes.get("property");
// 2. Cast it to a String
String propertyName = (String)propertyObject.get(0);
// 3. Retrieve the value
List<Object> list = attributes.get("value");
// 4. Cast it to int[]
int[] values = (int[])list.get(0);
// 5. Look up the actual version (based on the property name in the annotation)
final String inputVersion = context.getEnvironment().getProperty(propertyName);
// Assume it is an integer?
int version = Integer.valueOf(inputVersion).intValue();
// 6. Scan the supported version; look to match against actual version
for (int i : values)
if (i == version)
return true;
// The version is not supported
return false;
}
}
该方法可以通过验证属性和价值来改进;如果其中任何一个包含坏值/空值等,则返回false。
英文原文:http://emberjs.com/guides/components/customizing-a-components-element/ 默认情况下,每个组件是一个<div>元素。如果使用开发工具查看渲染后的组件,将看到一个如下所示的DOM表示: 1 2 3 <div id="ember180" class="ember-view"> <h1>My Component</h1>
我已经用自定义注释注释了Spring bean,但似乎Spring在创建bean后删除了我的自定义注释。 第二步不行,我的自定义注释丢失了。(可能是到期的代理文件) 我的豆子 我的一个自定义注释的示例 findAndDoStuffWithAnnotatedThings Bean中出错的内容被传递到一个类,在该类中,我的自定义注释得到验证,但我的验证程序找不到任何注释。(Util使用isAnnota
我目前正在开发一个尽可能尊重六边形架构原则的应用程序。 因此,我的“域”模块(组Id: ; 工件Id:)不依赖于任何技术框架。 我的所有服务都使用自定义注释(本身是我域的一部分)进行注释: 然而,在我的“Quarkus应用”模块(groupId:< code > acme ;artifact id:< code > app-quar kus ,我需要注入我的“域”模块中定义的服务(< code>a
我尝试用自定义控制器制作一个自定义组件。自定义组件已经显示在应用程序上,但我未能向其添加属性。 项目结构: null 布尔马尔科 完全错误: 原因:java.lang.nullPointerException:无法调用“javafx.scene.image.imageeview.setimage(javafx.scene.image.image)”,因为“controller.topbarbtn.
问题内容: 我正在尝试复制没有指定元素的数组。假设我有以下数组: 我想要的是将数组复制到array2,而元素不包含整数“ 6”,因此它将包含“ {1,2,3,4,5,7,8,9}” 我只想使用循环,这是我到目前为止所拥有的,但是它不起作用 谢谢 问题答案:
问题内容: 我正在从DropWizard 0.7.1迁移到0.8.1的过程中。这包括从Jersey 1.x迁移到2.x。在使用Jersey 1.18.1的实现中,我实现了(为简单起见,更改了所有类名)。此类将创建包含自定义注入批注的对象。包含传递并由读取的各种属性。最后,在该类中,我注册的新实例,如下所示。 我已经进行了一些研究,似乎无法完全围绕如何在Jersey 2.x中创建(或替换)这样的se