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でも簡単に動くようになるのは嬉しいのでこの変更は嬉しいです!
アホっぽい感想ですが、まあそんな感じでー。