我有一个使用静态块来初始化静态Hashtable的类。这是通过读取属性文件,解析文件内容,然后将适当的值设置到Hashtable中来完成的。
但是,我不是指定文件的位置,而是使用Spring注入位置,基本上是为了消除类中的任何硬编码值。我确实在其他地方看到它实际上可以注入静态变量,但它将涉及使用非静态setter。
所以我的问题是 - 在执行静态块之前是否会调用setter,或者在Spring调用setter之前是否会先执行静态块(这会在我的代码中引起异常)?
谢谢!
答案 0 :(得分:2)
静态初始化程序由类加载器执行,作为在授予任何代码访问类之前加载类的一部分。由于Spring必须实例化类 - 这肯定需要加载类 - 在它可以调用该实例上的setter之前,静态初始化程序块已经运行。