我在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很好。

10-05 22:02