为什么Spring忽略了我的@DependsOn注释?
我将Spring 3.1.3用于Web应用程序,使用XML配置和组件扫描。
我意识到其中一个扫描的组件必须在其他几个组件之前初始化。在所有需要后期构造初始化的类上,我都有一个@PostConstruct方法的注释。
为了设置依赖顺序,我将“@Component”更改为“@Component(”configData“)”,该类需要在其他类之前进行后期构造。然后,我在“configData”bean之后需要后构造的每个类定义之前添加了'@DependsOn(“configData”)”。
根据我所读到的内容,这就是我强制执行依赖顺序所需的全部内容。
然后,我构建了所有内容,设置了断点,并启动了应用。我希望在任何依赖的bean之前到达“configData”bean中的断点。事实并非如此。第一个断点是在其中一个依赖 bean 的“init”方法中。
然后,我更改了“log4j.xml”,将“debug”设置为“org.springframework”的日志记录级别,并重新运行我的测试。断点行为是相同的,我的日志记录没有显示任何有关Spring初始化的调试信息(我已经对log4j初始化本身进行了调试,所以我确认我为“org.springframework”设置了DEBUG)。
我可能错过了什么?
更新:
如果这很重要,这里有一些我在这里做的事情的骨架例子。
@Component("configData")
public class ConfigData {
....
@PostConstruct
public void init() {
....
}
}
@Component
@DependsOn("configData")
public class ClassDependentOnConfigData extends BaseClass {
....
@Override
@PostConstruct
public void init() {
super.init();
....
}
}
重申一下,我在运行时发现的是,“ClassDependentOnConfigData”中的“init()”方法被Spring在“ConfigData”中的“init()”方法之前调用。
另请注意,“BaseClass”有一个“ConfigData”的“@Autowired”。