5

我有一个使用静态块来初始化静态哈希表的类。这是通过读取属性文件、解析文件的内容,然后将适当的值设置到哈希表中来完成的。

但是,我不想指定文件的位置,而是使用 Spring 注入位置,基本上是为了消除类中的任何硬编码值。我确实在其他地方看到实际上可以注入静态变量,但它将涉及使用非静态设置器。

所以我的问题是——setter 的调用会在静态块执行之前发生,还是静态块会在 Spring 调用 setter 之前先执行(这基本上会导致我的代码出现异常)?

谢谢!

4

1 回答 1

4

在任何代码被授予对类的访问权之前,静态初始化程序由类加载器执行,作为加载类的一部分。由于 Spring 必须实例化该类——这肯定需要加载该类——在它可以在该实例上调用 setter 之前,静态初始化程序块已经运行。

于 2012-08-14T00:45:54.937 回答