为什么Spring会忽略我的@DependsOn注释?

大卫·卡尔(David M.Karr):

我将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”。

大卫·卡尔(David M.Karr):

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

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

使此方法起作用的方法是让“ dependee”类(其他人依赖的类)实现“ InitializingBean”类,这需要实现“ afterPropertiesSet()”方法。我将“ init()”方法的原始内容放入此方法中。我验证了这是现在在依赖于此的任何类之前执行的。

原始答案中提到的另一件事是,如果我已经用XML定义了“ dependee” bean并使用了“ init-method”属性,则该WOULD将在依赖于此的任何类之前执行。我没有验证。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Jersey忽略了我的Jackson注释?

为什么bitbake会忽略我的makefile中的CFLAGS?

为什么Java会忽略我的serialVersionUID?

为什么Spring会忽略@Required?

为什么Javascript会忽略单行HTML注释?

为什么我的Android过渡会忽略TransitionListener?

为什么flyway会忽略我的SQL迁移文件?

为什么WCF会忽略我的TokenProvider?

为什么我的MaybeT(State <type>)()会忽略状态更改?

为什么在绑定用@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)注释的LocalDateTime时,Spring会忽略输入字符串的时间偏移?

为什么我的平板电脑查询会忽略我的手机媒体查询

为什么我的代码会忽略该异常?

为什么sql会忽略我的句子?

为什么我的角度组件会忽略我的CSS文件?

为什么Makefile会忽略我的.o文件规则?

为什么我的python程序会忽略/跳过某些情况

为什么我的numpy构造会忽略元组的解构?

为什么我的uefi固件会忽略启动顺序?

为什么MongoDB会忽略我的某些更新?

为什么git会忽略我的.data文件夹?

为什么此for循环会忽略我的变量?

为什么我的html代码会忽略我的js?

为什么 Spring DependsOn 注释不能用于自动连接接口

为什么 Ansible 会忽略我的“sudo: False”?

为什么我的 Spring PropertySource 注释在 encoding 属性上失败?

为什么我的 Vue 组件会忽略媒体查询?

为什么 Python 会忽略我的输入并跳过我的 if 语句?

为什么 Rust 似乎忽略了我的生命周期注释?

为什么 formattable 会忽略我的条件格式?