以下の内容はhttps://rheb.hatenablog.com/entry/2025/12/12/090000より取得しました。


Quarkusで使用できるSpringアノテーション

Red Hat のソリューションアーキテクトの瀬戸です。

これはJakarta EE / Java EE Advent Calendar 2025の12日目の記事です。

この記事はQuarkusでのSpringアノテーションの使用を薦めるものではありません。適切にご使用ください。

と、最初に不穏な文章を書きましたが、Quarkusでは実はSpringのアノテーションや機能を一部、制限付きで使用する事ができます。

ただ、サポートされるものについてもSpringの全機能が使えるわけではありません。

例えばQuarkusのライブラリとしてquarkus-spring-diを追加する事で、SpringのDI系のアノテーションが有効になります。

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-spring-di</artifactId>
</dependency>

これを使う事で @Autowired などのSpringでおなじみのアノテーションがQuarkusでも使用できるようになります。

つまり、次のようなコードもQuarkus上で動作します。Springのコードに見えるでしょう?

package org.acme.spring.di;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class GreeterBean {

    private final MessageProducer messageProducer;

    @Autowired
    @Qualifier("noopFunction")
    StringFunction noopStringFunction;

    @Autowired
    @Qualifier("capitalizeFunction")
    StringFunction capitalizerStringFunction;

    @Value("${greeting.suffix:!}")
    String suffix;

    public GreeterBean(MessageProducer messageProducer) {
        this.messageProducer = messageProducer;
    }

    public String greet(String name) {
        final String initialValue = messageProducer.getPrefix() + " " + name + suffix;
        return noopStringFunction.andThen(capitalizerStringFunction).apply(initialValue);
    }
}

しかし、内部でSpringのDIコンテナが動くわけではなく、QuarkusのCDI上で動きます。SpringもQuarkusもDIコンテナではあるので、大きな問題になることはないとは少ないと思いますが、 ApplicationContextBeanPostProcessor などは動作せず、Spring AOPについても動作しないため、すべてにおいて完全な互換性が必要な場合には不適なものとなっています。

また、実行時DIではなく、ビルド時DIとなるので、実行時にDIを使っていろいろなことをやってる場合も多くの場合に動作しません。

実際にquarkus-spring-diの依存関係を確認したところ、QuarkusのDI実装であるarcにのみ依存が張られており、Spring本体への依存はありませんでした。

>mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< org.acme:spring-di-quickstart >--------------------
[INFO] Building spring-di-quickstart 1.0.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- dependency:3.7.0:tree (default-cli) @ spring-di-quickstart ---
[INFO] org.acme:spring-di-quickstart:jar:1.0.0-SNAPSHOT
[INFO] +- io.quarkus:quarkus-spring-di:jar:3.30.2:compile
[INFO] |  +- io.quarkus:quarkus-spring-core-api:jar:6.2.SP1:compile
[INFO] |  +- io.quarkus:quarkus-spring-context-api:jar:6.2.SP1:compile
[INFO] |  +- io.quarkus:quarkus-spring-beans-api:jar:6.2.SP1:compile
[INFO] |  \- io.quarkus:quarkus-arc:jar:3.30.2:compile
[INFO] |     +- io.quarkus.arc:arc:jar:3.30.2:compile
[INFO] |     |  +- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:compile
[INFO] |     |  \- io.smallrye.reactive:mutiny:jar:3.0.3:compile
[INFO] |     |     \- org.jctools:jctools-core:jar:4.0.5:compile
[INFO] |     \- org.eclipse.microprofile.context-propagation:microprofile-context-propagation-api:jar:1.3:compile
(以下省略)

SpringでのAOP的な何かを追加したい場合はCDIの仕組みを使う必要がありますのでご注意ください。 後ろ側で共通機能とかを作る人はCDIの拡張ポイントでがんばれ。

また、この記事ではspring-diの説明をしましたが、Spring Web、Data JPAなど、いくつかのアノテーションや機能の一部を使用することができます。興味がある方は次のURLからご確認ください。。

ja.quarkus.io




以上の内容はhttps://rheb.hatenablog.com/entry/2025/12/12/090000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14