我正在使用Spring 3.1.3作为webapp,使用XML配置和组件扫描。为什么Spring忽略我的@DependsOn注解?
我意识到其中一个扫描的组件必须在其他几个之前初始化。在需要构造后初始化的所有类上,我在方法上有一个@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();
....
}
}
要重申,有什么我发现在运行时的“的init()”中的“ClassDependentOnConfigData”方法被调用由春“的init()”方法之前在“ConfigData”。
还要注意“BaseClass”对于“ConfigData”有一个“@Autowired”。
你可以张贴bean定义的configData豆(Java和/或XML),以及后应初始化一个bean它作为一个例子吗? –
好吧,但这些只会是骨架,你会看到我的描述中显而易见的。 –
至于没有看到Spring调试消息。你有没有检查你没有全局THRESHOLD集或换句话说 - 你看到其他的DEBUG消息吗? –