当前位置: 首页 > 知识库问答 >
问题:

带有自定义注释的Quarkus CDI

陶高扬
2023-03-14

我目前正在开发一个尽可能尊重六边形架构原则的应用程序

因此,我的“域”模块(组Id:acme ; 工件Id:我的域)不依赖于任何技术框架。

我的所有服务都使用自定义注释(本身是我域的一部分)进行注释:

package acme.domain;

@Target({ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface DomainService {
}

然而,在我的“Quarkus应用”模块(groupId:< code > acme ;artifact id:< code > app-quar kus ,我需要注入我的“域”模块中定义的服务(< code>acme:domain)。

使用SpringBoot,使用以下注释注入这些域服务(基于自定义注释)非常容易:

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;

@SpringBootApplication
@ComponentScan(
    basePackageClasses = {CourtageSpringbootApplication.class, DomainService.class},
    includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {DomainService.class})}
)
public class MySpringbootApplication {
}

有没有与Quarkus相当的@ComponentScan

注意:我在应用程序Quarkus/src/主/资源/应用程序属性中添加了以下行,但它不起作用:

quarkus.index-dependency.courtage.group-id=acme
quarkus.index-dependency.courtage.artifact-id=my-domain

抛出异常:javax.enterprise.inject.UnsatisfiedResolutionException

共有1个答案

邹驰
2023-03-14

首先,我个人会考虑在您的域模块中严格避免CDI注释,这有点过分了。但如果你真的想要,我可以看到两种选择:

>

  • 您可以限制自己只在自己的注释上放置CDI注释,并使用@Stereotype。例如,如果您的@DomainService应等同于@ApplicationScoped,则可以这样声明

    @Stereotype
    @ApplicationScoped
    @Target({ElementType.TYPE})
    @Retention(value = RetentionPolicy.RUNTIME)
    public @interface DomainService {
    }
    

    如果您绝对坚持在域模块中不应该出现CDI注释,那么您可以创建一个Quarkus扩展,将< code>@DomainService注册为自定义bean定义注释。Quarkus CDI集成指南对此有更详细的介绍:https://quarkus.io/guides/cdi-integration您可以使用< code > autoaddscobebuilditem 或< code > beandefingannotationbuilditem 。

  •  类似资料:
    • 我已经用自定义注释注释了Spring bean,但似乎Spring在创建bean后删除了我的自定义注释。 第二步不行,我的自定义注释丢失了。(可能是到期的代理文件) 我的豆子 我的一个自定义注释的示例 findAndDoStuffWithAnnotatedThings Bean中出错的内容被传递到一个类,在该类中,我的自定义注释得到验证,但我的验证程序找不到任何注释。(Util使用isAnnota

    • 我看了堆栈交换和Spring示例网站上的每个示例,一切似乎都应该有效。我一定错过了一些简单的东西 我有一个自定义注释,理想情况下,如果类被注释,我希望将其应用于类的所有方法,或者应用于任何注释的方法。以下是方面、测试和代码: 注释 方面 测验 后果 链接 实际来源

    • 我有一个自定义注释如下。 一个版本的条件是, 在我的豆子注释中, 也有单版本匹配的bean,喜欢 我想验证从属性文件到可用的Beans支持版本的userInput版本。不确定,我如何获取值,迭代并与userInoutVersion进行比较。值可以是8或{6,7}作为int数组。不确定,我如何迭代该值以检查是否有任何值与输入版本匹配。 最终列表apiVersions=属性。获取(“价值”)。stre

    • 问题内容: 我正在从DropWizard 0.7.1迁移到0.8.1的过程中。这包括从Jersey 1.x迁移到2.x。在使用Jersey 1.18.1的实现中,我实现了(为简单起见,更改了所有类名)。此类将创建包含自定义注入批注的对象。包含传递并由读取的各种属性。最后,在该类中,我注册的新实例,如下所示。 我已经进行了一些研究,似乎无法完全围绕如何在Jersey 2.x中创建(或替换)这样的se

    • 问题内容: 使用基于注释的配置(等)是否可以实现相同的bean继承? http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework- reference/htmlsingle/#beans-child-bean- definitions 问题答案: java config中没有抽象bean的概念,因为Java语言已经

    • 使用基于注释的配置(等)是否可以实现相同的bean继承? http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#beans-child-bean-definitions