Spring Bootのサンプルで使ってるアノテーションをJSR 330のものにした

最近Spring Bootで遊んでいます。

今回はSpringのアノテーションである @Component@Autowired をJSR 330のアノテーションである @Named@Inject に変更してみました。

ソースコードは https://github.com/backpaper0/spring_boot_sample です。

tagは https://github.com/backpaper0/spring_boot_sample/releases/tag/jsr330 です。

本題

特に書くことない。 普通に置き換えたら普通に動いたので。

ただしスコープのアノテーションはSpringのままです。 セッションスコープのクラスに付けたアノテーションを @SessionScoped に変更したかったのですがJSR 330ではなくCDIのアノテーションのためどうしようもなかったというかなんというか。

まあいいか。

まとめ

JSR 330のアノテーションの方が見慣れていて個人的には良い。

Jersey 2.15のCDI統合を試す

Jersey 2.15でCDIとの統合機能が変更されたようです。

ざっくり読むと、これまではJava EEコンテナ(ていうかGlassFish?)との統合に注力してたけど 2.15からはJava EE環境じゃなくても統合できまっせ!という感じっぽいです。

試した

ハローワールドな、なんの役にも立たないWeb APIを作って試してみました。

メインクラスはこんな感じ。

package example;

import java.net.URI;

import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;
import org.jboss.weld.environment.se.Weld;

import com.sun.net.httpserver.HttpServer;

public class App {

    public static void main(String[] args) {
        Weld weld = new Weld();
        weld.initialize();
        URI uri = URI.create("http://localhost:8080/");
        ResourceConfig config = new ResourceConfig(HelloResource.class);
        HttpServer server = JdkHttpServerFactory.createHttpServer(uri, config);
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            server.stop(0);
            weld.shutdown();
        }));

        System.out.println("http://localhost:8080/hello?name=YourName");
    }
}

ご覧の通りです。 普通にWeldを動かして、Jerseyを動かしてるだけです。 簡単です。

pom.xmlのdependencyはこんな感じ。

<dependency>
  <groupId>org.glassfish.jersey.ext.cdi</groupId>
  <artifactId>jersey-weld2-se</artifactId>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.ext.cdi</groupId>
  <artifactId>jersey-cdi1x</artifactId>
</dependency>

所感

私はJava EEは好きですがJava SEでも簡単に動くようになるのは嬉しいのでこの変更は嬉しいです!

アホっぽい感想ですが、まあそんな感じでー。