我有一个依赖于外部依赖项的加密实用程序方法 --- 从属性文件中检索的密码 key 。在我继承的当前代码库中检索它的方式是,它依赖于创建新对象才能获取属性文件中属性的值。例如,如果想从属性文件中获取 Cipher Key,则如下所示:
public synchronized static String encrypt(String someTextToEncrypt) {
String propertyValue = null;
propertyValue = getProcessCommonBase().
getProcessProperties.getProperty("CIPHER_KEY");
/*encrypt algorithm*/
return encryptedForm;
}
private synchronized static ProcessCommonBase getProcessCommonBase() {
if (processCommonBase == null) {
processCommonBase = new ProcessCommonBase();
}
return processCommonBase;
}
private static ProcessCommonBase processCommonBase;
已编辑: 从设计角度来看,使用 processCommonBase 实例变量之类的东西是一个很好的做法吗?我的理解是,一个好的做法是静态变量应该是最终的并且不改变。然而,在这种情况下,ProcessCommonBase 类维护状态并且可能会发生更改。
新问题:如果静态方法依赖于外部的东西,我不应该只将该方法和 processCommon 基本变量标记为非静态,并且在 Spring 中为其创建一个 bean 定义吗?什么是更好的?
最佳答案
我同意乔纳斯的观点。我不明白为什么不将变量设为最终变量。您能否详细说明一下这到底是什么意思:
My understanding is that a good practice is that static variables should be final and do not change. In this case, however, the ProcessCommonBase class maintains state and is subject to change.
即使变量是最终变量,您仍然可以以与使用非最终变量完全相同的方式更改它引用的对象。这就是为什么静态方法让静态变量保持其状态是完全可以的,但在这种情况下没有什么可以阻止你实际将其设为最终状态。为什么不这样做:
私有(private)静态 ProcessCommonBase processCommonBase = new ProcessCommonBase();
也许有一些东西阻止您在静态初始化时创建 processCommonBase,但从您提供的信息来看,这一点并不明显。
关于java - 是否建议使用静态变量来维护状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426835/