如何解决如何在单文件 Groovy 脚本中使用 Micronaut 和依赖注入?
我想从 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);
}
它不运行后构造方法并记录:
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 和依赖注入?
解决方法
如何在单个文件中使用 Micronaut 进行依赖注入 Groovy 脚本?
您必须使用在脚本的编译时类路径上配置的 Micronaut 注释处理器来编译脚本中的所有代码。从技术上讲,这可以通过单个脚本完成,但实际上,我认为没有多少人有充分的理由去做或建立支持以使其更容易完成。
仅供参考: 不是您所问问题的答案,而是一种简单的替代方法是不在单个脚本中定义所有与 bean 相关的类,而是在它们自己的单独源文件中定义它们配置为使用我们的注释处理器使用 Maven 或 Gradle 构建的项目,然后使用 @Grab
从您的脚本中使用这些类,就像您使用其他依赖项一样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。