关于 cdi 实例的建议 List.of()

javaslang List.of() on cdi Instance

我有多个 class 我创建了限定词:

  @ServiceComponent(restPath = "/trucks")
  public class TruckService {
  }

  @ServiceComponent(restPath = "/cars")
  public class CarService {
  }

这是限定符(对问题不重要)

    @Qualifier
    @Retention(RetentionPolicy.RUNTIME)
    @Target({TYPE, FIELD})
    public @interface ServiceComponent {

        public boolean exposeAsRest() default true;

        @Nonbinding public String restPath() default "";

        @Nonbinding public String restGetPrefix() default "get,find,all";

        @Nonbinding public String restPostPrefix() default "create,new,post";
    }

在另一个 class 中,我使用 javax.enterprise.inject.Instance<>

注入那些实例
    class SomeConfigurationClasss {

        @Inject
        @ServiceComponent()
        Instance<Object> _restComponents;

         @Override
          public void iterate() throws Exception {

              //iterate
              for(Object obj : _restComponents){
                  somefuncion(obj);

              }

              //List.of(_restComponents)
                //.flatMap(obj -> somefuncion(obj));

          }

      }

如果我执行 "normal" 迭代(对于...),我会得到作为参数提供给 somefunction() 的对象(TruckService 或 CarService)。

但是如果我使用 javaslang's List.of(...) 我会得到实例本身。我认为这是预期的行为

是否有可能在包含一个或多个 bean 的实例上使用 List.of(取决于注入绑定)。 (我已经尝试在实例上调用 iterator(), select())

Instance<T> extends Iterable<T> 所以你应该使用 List#ofAll(Iterable)