关于 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)
我有多个 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)