Java 在实用程序类中注入变量是一种好的做法吗?
我有下面的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
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中注入具有属性的字段。虽然这不是动态的,但您确实不应该具有动态属性(尽管在我看来这可能不是一个好主意)。将属性看作启动常量或其他东西。他们不应该改变 一般来说,依赖注入是一件好事,因为它能带来更好的设计,更易于测试。在你的特殊情况下,你必须看看你正在努力实现什么
似乎您正试图提供一个单点来通过标准Javaproperties
API访问属性并添加一些值。例如,通过提供一个getBoolean()
等效项
关于单点访问,您需要考虑线程问题。但是,只要您能够保证在使用其静态方法之前配置了实用程序类,您就可以了
关于扩展
Properties
API,最好使用现有的库之一,而不是承担编写和维护自己库的成本。例如,我发现它非常好。这里commonProps只是一个占位符。此类中需要在启动期间注入的多个函数所使用的任何成员。