如何只将值传递给java方法一次?

问题描述 投票:-3回答:2

假设我有一个java方法:

private String (StringUtility stringUtil)
{
   String maxValue = stringUtil.getMaxValue()
}

现在,StringUtility保存maxValue并从Spring加载的配置字段中读取它,并且在运行时不会更改。这种方法每1ms调用一次。因此,如果maxVlue一旦加载就不会被更改,是否有另一种方法将它传递给方法而不是每次调用方法时都得到它并且每次调用stringUtil时都要避免加载以获取maxValue ?

谢谢。

java performance
2个回答
0
投票

这听起来非常适合您在应用程序启动时加载的单例,然后重用这些值。

像这样的东西:

public final class StringUtility {
    private static String maxValue;
    public static final synchronized String getMaxValue(){
        if(maxValue == null){
            //set value
        }
        return maxValue;
    }
}

然后在您的方法中使用它。


0
投票

既然你正在使用Spring,为什么不制作StringUtility缓存值呢?你可以使用Spring Cache annotations来完成这个任务。

根据bean的描述方式,您可以这样做:

@Component
public class StringUtility {

    @Value("${maxValue}")
    private String maxValue;

    @Cacheable("string-utility")
    public String getMaxValue() {
        return maxValue;
    }
}

我将保留配置和完整的布线作为读者的练习。

(即使你不使用Spring进行缓存,这对于缓存仍然是完美的用例。既然你保证这个值永远不会从缓存中逐出,你可以依靠它来提供值或者,这可能被解释为过早的优化,因为无论你做什么,呼叫都会很便宜。)

© www.soinside.com 2019 - 2024. All rights reserved.