使用Kotlin BeanDefinitionDsl时未调用@PostConstruct

时间:2017-10-17 20:06:47

标签: spring kotlin spring-bean

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

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

  1. 我分享了使用Kotlin DSL https://github.com/sdeleuze/spring-kotlin-functional
  2. 的Spring示例
  3. 我在UserHandler类中添加了一个@PostConstruct。 (详情如下。)
  4. 我在此处推送了结果:https://github.com/benjishults/spring-kotlin-functional
  5. 所以你需要做的就是分叉我的回购并做一个gradle run。

    我的问题是:

    1. 我不希望调用@PostConstruct,因为我将这个类作为一个bean引入?
    2. 我错过了一步吗?
    3. 这是一个Spring bug吗?
    4. 如果你不想拉我的回购,这里有更多关于我做了什么的细节。我将此添加到UserHandler类:

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

      以及导入和Gradle依赖。

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

      beans().initialize(context)
      

      并将其带入上下文:

      $ssh -T github@github.com

1 个答案:

答案 0 :(得分:3)

GenericApplicationContext类中实例化的

Application不支持开箱即用@PostContruct。要使其有效,您应该使用AnnotationConfigApplicationContext代替并删除Gradle版本中spring-aop的排除。