我有一个包含带@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用@Dependent之类的东西替换@Statless注释。但我不明白的是,我怎么能积极地做到这一点,而且没有任何例子可以提示我正确的方向。
我所拥有的是一个annotationstrtransformer,它将能够做到这一点,但我如何将它应用到我的应用程序?我收集到的是,我需要一个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
但是由于在运行时扩展描述中引用了部署项目,因此它将在构建时加载。