【问题标题】:Micronaut ApplicationContext creation for package为包创建 Micronaut ApplicationContext
【发布时间】:2022-01-15 23:14:58
【问题描述】:

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

我写:

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

context.getBean(MessageEventListener.class);

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

【问题讨论】:

    标签: java package micronaut applicationcontext


    【解决方案1】:

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

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

    环境文档#addPackage 说:

    添加应用程序包。应用程序包是候选人 扫描需要它的工具(例如 JPA 或 GORM)。参数:pkg – 要添加的包返回:这个环境

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

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

    来自 Micronaut 3.2.1 的源代码

    【讨论】:

    • 你说得对,环境解决了我的问题。我创建了一个带有@Configuration @Requires(env = "server") 注释的package-info.java,它按预期工作!
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多