使用 Kotlin BeanDefinitionDsl 时未调用 @PostConstruct
@PostConstruct not called when using Kotlin BeanDefinitionDsl
当使用 Kotlin BeanDefinitionDsl 将 bean 添加到上下文时,似乎没有调用 @PostConstruct 方法。
这在我自己的项目中发生过,但为了创建一种简单的方法来重现它,这就是我所做的。
- 我分叉了 Spring 使用 Kotlin DSL 的示例 https://github.com/sdeleuze/spring-kotlin-functional
- 我向 UserHandler 添加了一个 @PostConstruct class。 (下面有更多详细信息。)
- 我把结果推送到这里:https://github.com/benjishults/spring-kotlin-functional
所以你需要做的就是 fork 我的 repo 并做一个 gradle 运行.
我的问题是:
- 既然我将 class 作为 bean 引入,难道我不应该期望调用 @PostConstruct 吗?
- 我是不是漏了一步?
- 这是 Spring 错误吗?
如果你不想提取我的回购协议,这里有更多关于我所做的事情的细节。我将其添加到 UserHandler class:
@PostConstruct
fun afterPropertiesSet() {
System.out.println("AFTER PROPERTIES SET CALLED")
}
连同导入和 Gradle 依赖项。
UserHandler bean 通过调用 beans DSL 中的 bean 方法被拉入上下文,如下所示:
fun beans() = beans {
bean<UserHandler>()
// ...
}
并将其带入上下文:
beans().initialize(context)
GenericApplicationContext
实例化在Application
class不支持开箱即用@PostContruct
。要使其正常工作,您应该改用 AnnotationConfigApplicationContext
并在 Gradle 构建中删除 spring-aop
的排除项。
当使用 Kotlin BeanDefinitionDsl 将 bean 添加到上下文时,似乎没有调用 @PostConstruct 方法。
这在我自己的项目中发生过,但为了创建一种简单的方法来重现它,这就是我所做的。
- 我分叉了 Spring 使用 Kotlin DSL 的示例 https://github.com/sdeleuze/spring-kotlin-functional
- 我向 UserHandler 添加了一个 @PostConstruct class。 (下面有更多详细信息。)
- 我把结果推送到这里:https://github.com/benjishults/spring-kotlin-functional
所以你需要做的就是 fork 我的 repo 并做一个 gradle 运行.
我的问题是:
- 既然我将 class 作为 bean 引入,难道我不应该期望调用 @PostConstruct 吗?
- 我是不是漏了一步?
- 这是 Spring 错误吗?
如果你不想提取我的回购协议,这里有更多关于我所做的事情的细节。我将其添加到 UserHandler class:
@PostConstruct
fun afterPropertiesSet() {
System.out.println("AFTER PROPERTIES SET CALLED")
}
连同导入和 Gradle 依赖项。
UserHandler bean 通过调用 beans DSL 中的 bean 方法被拉入上下文,如下所示:
fun beans() = beans {
bean<UserHandler>()
// ...
}
并将其带入上下文:
beans().initialize(context)
GenericApplicationContext
实例化在Application
class不支持开箱即用@PostContruct
。要使其正常工作,您应该改用 AnnotationConfigApplicationContext
并在 Gradle 构建中删除 spring-aop
的排除项。