java - 带有自定义注释的 Quarkus CDI

标签 java cdi quarkus

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

因此,我的“域”模块(groupId:acme;artifactId:my-domain)不依赖于任何技术框架。

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

package acme.domain;

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

但是,在我的“Quarkus application”模块(groupId:acme;artifactId:app-quarkus)中,我需要注入(inject)在“domain”模块中定义的服务(acme:domain)。

使用SpringBoot,就是quite easy to inject those domain services (based on a custom annotation)带有以下注释:

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 的功能?

注意:我在 app-quarkus/src/main/resources/application.properties 中添加了以下几行,但它不起作用:

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

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

最佳答案

首先,我个人认为严格避免在域模块中使用 CDI 注释有点过于热心。但如果你真的想要这样,我可以看到两个选择:

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

    @Stereotype
    @ApplicationScoped
    @Target({ElementType.TYPE})
    @Retention(value = RetentionPolicy.RUNTIME)
    public @interface DomainService {
    }
    
  2. 如果您绝对坚持域模块中不应出现任何 CDI 注释,您可以创建一个 Quarkus 扩展,将 @DomainService 注册为自定义 bean 定义注释。 Quarkus CDI 集成指南对此有更多详细信息:https://quarkus.io/guides/cdi-integration您可以使用 AutoAddScopeBuildItem 或 BeanDefiningAnnotationBuildItem。

关于java - 带有自定义注释的 Quarkus CDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71572027/

相关文章:

java - 使用 JPA 处理 Spring、Hibernate 中的脏读

java - 使用java查询mongo oplog的时间戳字段

java-ee-6 - CDI 生产者 同一类别的不同版本

java - Jersey 没有注入(inject)我的 CDI bean

authentication - Quarkus with Swagger UI 应用全局授权

class - Java Quarkus 从 Swagger 中删除方法

java - 替换 wicket 6.3 jquery

java - 带流的 JPanel 中的固定宽度、可变高度

jsf - @FacesComponent 中的 @Inject 值 null

Quarkus docker run exec 用户进程导致 : exec format error