2
リクエストの過程で作成されたオブジェクトがあり、そのオブジェクトにサービスを呼びたいと思います。しかし、フレームワークがバインドメソッドを呼び出すとき、バインドするメソッドではなく、クラスの独自のインスタンスにバインドします。非コンポーネントクラスからOSGIサービスを使用する方法
public class A {
final X x;
final Y y;
public A(Z z) {
this.x = z.x;
this.y = z.y;
}
public String doStuff() {
//do stuff
//call a service
}
}
public class B extends RestAPIServlet {
public String method(@SlingRequest SlingHttpServletRequest request, @SlingResponse SlingHttpServletResponse response) {
Z z = new ObjectMapper().readValue(request.getReader(), Z.class);
return new A(z).doStuff();
}
}
public class C extends TagSupport {
public int doStartTag() {
Z z = getZFromProperties();
String res = new A(z).doStuff();
pageContext.setAttribute("res", res);
return super.doStartTag();
}
}
Aから直接サービスを呼び出す方法はありますか?タグとサーブレットが同じ作業を実行している状況で、コードの再利用に適したパターンがありますか?
私はタグ/サーブレットがサービスにAを与える共通のインタフェースを実装しないように頼まれました。また、サプライヤを使ってタグ/サーブレットを通してサービスにアクセスすることもできませんでした。