gpt4 book ai didi

spring - 使用 Kotlin BeanDefinitionDsl 时未调用 @PostConstruct

转载 作者:行者123 更新时间:2023-12-02 03:15:39 31 4
gpt4 key购买 nike

当使用 Kotlin BeanDefinitionDsl 将 bean 添加到上下文时,似乎不会调用 @PostConstruct 方法。

这在我自己的项目中发生在我身上,但为了创建一种简单的方法来重现它,这就是我所做的。

  1. 我 fork 了使用 Kotlin DSL 的 Spring 示例 https://github.com/sdeleuze/spring-kotlin-functional
  2. 我向 UserHandler 类添加了 @PostConstruct。 (更多详细信息如下。)
  3. 我将结果推送到这里:https://github.com/benjishults/spring-kotlin-functional

因此,您所需要做的就是 fork 我的存储库并执行 gradle 运行。

我的问题是:

  1. 既然我将该类作为 bean 引入,难道我不应该期望 @PostConstruct 被调用吗?
  2. 我是不是漏掉了一步?
  3. 这是 Spring 的 bug 吗?

如果您不想拉取我的存储库,这里有有关我所做操作的更多详细信息。我将其添加到 UserHandler 类中:

@PostConstruct
fun afterPropertiesSet() {
System.out.println("AFTER PROPERTIES SET CALLED")
}

以及导入和 Gradle 依赖项。

通过调用 beans DSL 中的 bean 方法将 UserHandler bean 拉入上下文,如下所示:

fun beans() = beans {
bean<UserHandler>()
// ...
}

这被带入上下文:

beans().initialize(context)

最佳答案

Application 类中实例化的

GenericApplicationContext 不支持开箱即用的 @PostContruct。为了使其正常工作,您应该使用 AnnotationConfigApplicationContext 代替,并在 Gradle 构建中删除 spring-aop 的排除。

关于spring - 使用 Kotlin BeanDefinitionDsl 时未调用 @PostConstruct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798347/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com