为包创建 Micronaut ApplicationContext

Micronaut ApplicationContext creation for package

在 Spring 中,很容易创建仅使用给定包中定义的 类 的 ApplicationContext。如何在 Micronaut 中实现这一点?

我写:

ApplicationContext context =
    ApplicationContext.builder()
        .args(args)
        .packages("org.kalamity.server")
        .start();

context.getBean(MessageEventListener.class);

但是创建并注入了来自外部包的 bean。我知道,Micronaut 在编译时工作,所以这可能是完全不可能的。

查看 io.micronaut.context.DefaultApplicationContextBuilder#build 时,我们会发现:

if (!packages.isEmpty()) {
    for (String aPackage : packages) {
        environment.addPackage(aPackage);
    }
}

环境文档#addPackage 说:

Add an application package. Application packages are candidates for scanning for tools that need it (such as JPA or GORM). Params: pkg – The package to add Returns: This environment

因此,我认为不可能使用开箱即用的 Micronaut 问题中的包列表来限制上下文。

但是,您可以使用 @Requires 注释来加载部分上下文。 https://docs.micronaut.io/latest/guide/#conditionalBeans

来自 Micronaut 3.2.1 的源代码