【问题标题】:How to use Micronaut & depenency injection in a single-file Groovy script?如何在单文件 Groovy 脚本中使用 Micronaut 和依赖注入?
【发布时间】:2021-02-07 03:20:09
【问题描述】:

我想通过 Groovy 脚本使用 Micronaut。好像@Inject@PostConstruct等注解没有处理。

这是我试过的代码:

#!/usr/bin/env nix-shell
#!nix-shell -i groovy
@Grapes([
    @Grab('ch.qos.logback:logback-classic'),
    @Grab('io.micronaut:micronaut-runtime')
])

package org.sdf // NPE without package

import io.micronaut.runtime.Micronaut
import javax.inject.*
import javax.annotation.*

@Singleton
class Component {

}

@Singleton
class App implements Runnable {
    @Inject
    Component comp

    @Override
    @PostConstruct
    public void run() {
        // Never runs
        assert this.comp != null
        assert false
    }
}

static void main(String... args) {
    Micronaut.run(App, args);
}

它不运行 post-construct 方法并记录以下内容:

22:17:43.669 [main] DEBUG i.m.context.DefaultBeanContext - Resolved bean candidates [] for type: interface io.micronaut.runtime.EmbeddedApplication
22:17:43.671 [main] INFO  io.micronaut.runtime.Micronaut - No embedded container found. Running as CLI application

如何在单文件 Groovy 脚本中使用具有依赖注入的 Micronaut?

【问题讨论】:

    标签: groovy micronaut


    【解决方案1】:

    如何在单个文件中使用具有依赖注入的 Micronaut Groovy 脚本?

    您必须使用在脚本的编译时类路径上配置的 Micronaut 注释处理器来编译脚本中的所有代码。从技术上讲,这可以通过单个脚本完成,但实际上,我认为很多人不会有充分的理由这样做或建立支持以更轻松地完成。

    仅供参考: 不是您所问问题的答案,但一种简单的替代方法是不在单个脚本中定义所有与 bean 相关的类,而是在它们自己的单独源文件中定义它们配置为使用我们的注释处理器使用 Maven 或 Gradle 构建的项目,然后使用 @Grab 从脚本中使用这些类,就像其他依赖项一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多