为包创建 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 的源代码
在 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 的源代码