我有一个库,其中包含用@Stateless 注释的服务,我无法修改。例如这样的事情:
@Stateless
@Local(MyServiceLocal.class)
@Remote(MyServiceRemote.class)
public class MyServiceBean implements MyServiceLocal
现在我想在我的 quarkus 应用程序中使用这些服务,就像这样简单:
@QuarkusMain
public class MyMain implements QuarkusApplication {
@Inject
MyServiceLocal myService;
@Override
public int run(String... args) {
myService.doSomething();
}
}
...但是因为它们没有 bean 定义注释,而且我无法添加一些,所以它们没有被注入。
根据我的简单理解,我可以使用 quarkus AnnotationsTransformer 将 @Statless 注释替换为 @Dependent 之类的注释。 但我不明白的是,我如何才能积极地实现这一目标,而且没有任何例子可以提示我朝着正确的方向前进。
我有一个 AnnotationsTransformer,它可以很好地做到这一点,但我如何将它应用到我的应用程序中?我收集到的是,我需要一个 quarkus 扩展,在我的部署子项目中使用 AnnotationsTransformer。但是我的运行时子项目的内容是什么?我不需要扩展中的转换注释,但在我的 quarkus 应用程序中。
因为我的理解是我不能直接在我的 quarkus 应用程序中使用 BuildSteps,所以我被卡住了。
也许有人可以在正确的方向上提示我如何实现这样的目标。
哇,这出奇的简单。 @Ladicek 的回答是理解问题的最后推动力。
我现在有一个带有空运行时子项目的简单 quarkus 扩展,以及包含单个类的部署子项目:
@BuildStep
AutoAddScopeBuildItem autoAddScope() {
return AutoAddScopeBuildItem.builder().containsAnnotations(DotName.createSimple("javax.ejb.Stateless"))
.defaultScope(BuiltinScope.DEPENDENT)
.build();
}
部署对运行时有依赖,你的项目也得对运行时有依赖。我不明白你到底怎么可能从你的部署项目中的类中受益。
deployment -> runtime <- your project
但是由于在您的运行时扩展描述中引用了部署项目,因此它将在构建时加载。