我在Java中有以下Utility类。
public class Utils {
private static Properties commonProps;
private Utils() {}
private static setCommonProps(Properties commonProps) {
Utils.commonProps = commonProps;
}
public static boolean staticMethod1() {
commonProps.get("xyz");
}
public static void staticMethod2() {
}
}
然后,借助Spring函数org.springframework.beans.factory.config.MethodInvokingFactoryBean初始化“ commonProps”。
这种代码设计有什么问题吗?这会产生不良影响吗?
对Utility类进行此类变量初始化是一种好习惯吗?
注意:在这里“属性commonProps”只是一个占位符。需要在此类中使用的任何普通成员,必须在启动期间注入。
最佳答案
通常,依赖项注入是一件好事,因为它可以导致更易于测试的更好的设计。在您的特定情况下,您必须查看要达到的目标。
看来您正在尝试提供一个单点来通过标准Java Properties
API访问属性并为其添加一些值。例如,通过提供一个getBoolean()
等效项。
关于单点访问,您需要考虑线程问题。但是,只要可以保证在使用实用程序类的静态方法之前就已对其进行配置,就可以了。
关于扩展Properties
API,使用现有库之一可能会更好,而不是花费编写和维护自己的库的开销。例如,我发现Apache Commons Configuration很好。