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

时间:2017-12-24 22:01:45

标签: java performance

假设我有一个java方法:

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

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

谢谢。

2 个答案:

答案 0 :(得分:0)

这听起来非常适合您在应用开始时加载的单身人士,然后重复使用这些值。

类似的东西:

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

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

答案 1 :(得分:0)

由于您使用的是Spring,为什么不制作static String filterSecretKeyOutOfCommandLineLogString(final String[] args) { return joinArgsToString(filterOptionAndValueOutOfCommandLineLogString(SECRET_KEY, args)); } private static String joinArgsToString(final String[] args) { return Joiner.on(ARG_JOINER_DELIMITER).join(args); } private static String[] filterOptionAndValueOutOfCommandLineLogString(final Option option, final String[] args) { final List<String> filteredList = new ArrayList<>(); final int numArgs = args.length; for (int i = 0; i < numArgs; ++i) { if (Arguments.matchesOption(option, args[i])) { ++i; } else { filteredList.add(args[i]); } } return filteredList.toArray(new String[0]); } 缓存值?您可以使用Spring Cache annotations完成此操作。

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

StringUtility

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

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