AffluxThread.java 文件源码

java
阅读 33 收藏 0 点赞 0 评论 0

项目:vertx-zero 作者:
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());
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号