为什么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();

....

}

}

重申一下,我在运行时发现的是,Spring在“ ConfigData”中的“ init()”方法之前调用了“

ClassDependentOnConfigData”中的“ init()”方法。

另请注意,“ BaseClass”的“ ConfigData”具有“ @Autowired”。

回答:

(来自其他人的正确答案,但现在已删除答案)

@DependsOn合同仅保证已构造bean和设置了属性。这不能保证已调用任何@PostConstruct方法。

使此方法起作用的方法是让“ dependee”类(其他人依赖的类)实现“ InitializingBean”类,这需要实现“

afterPropertiesSet()”方法。我将“ init()”方法的原始内容放入此方法中。我验证了这是现在在依赖于此的任何类之前执行的。

原始答案中提到的另一件事是,如果我已经用XML定义了“ dependee” bean并使用了“ init-

method”属性,则该WOULD将在依赖于此的任何类之前执行。我没有验证。

以上是 为什么Spring会忽略我的@DependsOn注释? 的全部内容, 来源链接: utcz.com/qa/430313.html

回到顶部