首先发生 - Spring的依赖注入,还是静态块的执行?

cde*_*egu 5 spring static code-injection

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

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

所以我的问题是 - 在执行静态块之前是否会调用setter,或者在Spring调用setter之前是否先执行静态块(这会在我的代码中导致异常)?

谢谢!

Dav*_*ess 5

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