Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在实用程序类中注入变量是一种好的做法吗?_Java_Spring - Fatal编程技术网

Java 在实用程序类中注入变量是一种好的做法吗?

Java 在实用程序类中注入变量是一种好的做法吗?,java,spring,Java,Spring,我有下面的Java实用程序类 public class Utils { private static Properties commonProps; private Utils() {} private static setCommonProps(Properties commonProps) { Utils.commonProps = commonProps; } public stati

我有下面的Java实用程序类

    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”

这种代码设计有什么错误吗?这会有什么不良影响吗? 对实用程序类进行这样的变量初始化是一种好的做法吗


注意:这里的“Properties commonProps”只是一个占位符。此类中需要使用的、必须在启动期间注入的任何公共成员。

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


您已经能够使用
@Value
在bean中注入具有属性的字段。虽然这不是动态的,但您确实不应该具有动态属性(尽管在我看来这可能不是一个好主意)。将属性看作启动常量或其他东西。他们不应该改变

一般来说,依赖注入是一件好事,因为它能带来更好的设计,更易于测试。在你的特殊情况下,你必须看看你正在努力实现什么

似乎您正试图提供一个单点来通过标准Java
properties
API访问属性并添加一些值。例如,通过提供一个
getBoolean()
等效项

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


关于扩展
Properties
API,最好使用现有的库之一,而不是承担编写和维护自己库的成本。例如,我发现它非常好。

这里commonProps只是一个占位符。此类中需要在启动期间注入的多个函数所使用的任何成员。