private void scanQualifier(final Field field,
final List<Class<?>> instanceCls) {
// Field must annotated with @Qualifier
final Annotation annotation = field.getAnnotation(Qualifier.class);
Fn.flingUp(null == annotation,
LOGGER, QualifierMissedException.class,
getClass(), field.getName(), field.getDeclaringClass().getName());
// All implementation class must be annotated with @Named
final boolean match = instanceCls.stream()
.allMatch(item -> item.isAnnotationPresent(Named.class));
final Set<String> names = instanceCls.stream()
.map(Class::getName).collect(Collectors.toSet());
Fn.flingUp(!match,
LOGGER, NamedImplementionException.class,
getClass(), names, field.getType().getName());
// Named value must be reflect with @Qualifier
final String value = Instance.invoke(annotation, "value");
final Optional<Class<?>> verified = instanceCls.stream()
.filter(item -> {
final Annotation target = item.getAnnotation(Named.class);
final String targetValue = Instance.invoke(target, "value");
return value.equals(targetValue)
&& !StringUtil.isNil(targetValue);
}).findAny();
Fn.flingUp(!verified.isPresent(),
LOGGER, NamedNotFoundException.class,
getClass(), names, value);
// Passed all specification
this.fieldMap.put(field.getName(), verified.get());
}
AffluxThread.java 文件源码
java
阅读 33
收藏 0
点赞 0
评论 0
项目:vertx-zero
作者:
评论列表
文章目录