JAX-RSをやってみる (8) - DynamicFeature -
公式ドキュメント先: https://jersey.java.net/documentation/latest/user-guide.html#d0e8531
例えば特定のリソースクラスだったりメソッドだったりで動的にコンポーネントをregisterしたいなどの要件がある場合にはDynamicFeatureを使えばよろしい模様
package sample;
import javax.ws.rs.container.DynamicFeature;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.Provider;
import sample.controller.Home;
import sample.filter.SampleFilter;
import sample.filter.SampleRequestFilter;
@Provider
public class SampleDynamicFeature implements DynamicFeature {
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
Class<?> clazz = resourceInfo.getResourceClass();
// 特定のリソースクラス以外を除外する
if (clazz != Home.class) {
return;
}
// 特定のリソースクラスのメソッドにアノテーションがついてる場合にのみ適応
if (resourceInfo.getResourceMethod().isAnnotationPresent(SampleFilter.class)) {
// context.register(...);
}
}
}
っていうように以前にMessageBodyWriter等の独自実装を利用する場合には別個なプロジェクトとしてAutoDiscoverableな仕組みを使ってたけど、リソースによる制限などによるコンポーネントの作用な手段を利用したい場合にはDynamincFeatureを使えば良い模様