在Utility类中注入变量是一种好习惯吗?

时间:2017-09-27 05:34:08

标签: java spring

我在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() {
       }
    }

我们初始化" commonProps"在Spring函数org.springframework.beans.factory.config.MethodInvokingFactoryBean的帮助下。

这个代码设计有什么问题吗?这有什么不好的影响吗? 对Utility类进行这样的变量初始化是一个好习惯吗?

注意:这里"属性commonProps"只是一个占位符。需要在此类中使用的任何常用成员,必须在启动期间注入。

2 个答案:

答案 0 :(得分:2)

一般来说,依赖注入是一件好事,因为它会带来更好的设计,更容易测试。在您的特定情况下,您必须查看您要实现的目标。

您似乎尝试提供单点访问属性,并在标准Java Properties API上添加一些值。例如,通过提供getBoolean()等价物。

关于单点访问,您需要考虑线程问题。但是,只要您可以保证在使用静态方法之前配置实用程序类,就应该没问题。

关于扩展Properties API,您可能更好地使用现有库之一,而不是承担编写和维护自己的库的成本。例如,我发现Apache Commons Configuration非常好。

答案 1 :(得分:1)

静态字段中不要有任何可变性。这是一种反模式。也不要使用Spring注入静态字段。做这些事情会使你的代码难以使用,而且很难测试。

您已经能够使用@Value在bean中注入包含属性的字段。虽然这不是动态的,但你真的不应该有动态属性(虽然它可能是IMO,但这并不是一个好主意)。将属性视为启动常量或其他内容。他们不应该改变。