gpt4 book ai didi

java - 我想要 Spring 注入(inject)的函数需要可变参数。我应该提供一个需要列表的重载吗?

转载 作者:行者123 更新时间:2023-11-30 07:08:53 24 4
gpt4 key购买 nike

我有一个工厂方法来包装一些与订单相关的东西:

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;

public class ThingBoxProcessor {
public static ThingBox forInputThings(Thing... thingsToProcess) {
ThingBox thingBox = new ThingBox();
for (Thing thing : Lists.reverse(ImmutableList.copyOf(thingsToProcess))) {
thingBox.store(thing);
}
return thingBox;
}
}

我像这样注入(inject)它:

<bean name="Things" class="ThingBoxProcessor" factory-method="forInputThings">
<constructor-arg>
<list>
<ref bean="ThingTwo" />
<ref bean="ThingOne" />
<!-- imagine a couple dozen other things that do different order-sensitive things -->
</list>
</constructor-arg>
</bean>

Spring 是否创建一个 ArrayList,然后将其转换为数组?提供重载是否有任何显着的性能优势,例如:

    public static ThingBox forInputThings(Thing... thingsToProcess) {
return forInputThings(ImmutableList.copyOf(thingsToProcess));
}

public static ThingBox forInputThings(List<Thing> thingsToProcess) {
ThingBox thingBox = new ThingBox();
for (Thing thing : Lists.reverse(thingsToProcess)) {
thingBox.store(thing);
}
return thingBox;
}

( This question 不是我感兴趣的。我知道我可以将 spring xml 列表注入(inject)到 varargs 参数中;我只是想知道是否有性能原因需要这样做否则。)

最佳答案

我不会花任何时间来解决这个问题,因为:

假设您正在处理单例范围的 Spring bean,此操作将发生一次。

另外:启动 Spring 上下文至少需要几秒钟,因为它需要读取配置文件、加载类等。与此相比,在任何合理大小的数组和列表之间来回转换的代价(合理的)从某种意义上说,您可能不会将超过 50 个参数放入 Spring),可能会增加大约 0,000001% 的启动速度

因此,从可靠性、可维护性或类似的角度来看,考虑应该选择哪个选项是有意义的,但从性能角度来看,它实际上是无关紧要的。

关于java - 我想要 Spring 注入(inject)的函数需要可变参数。我应该提供一个需要列表的重载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com