我有一个在请求过程中创建的对象,我希望该对象可以调用服务。但是,当框架调用绑定方法时,它会绑定到自己的类实例,而不是我想要绑定的实例。
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呼叫服务?在您有标记和servlet执行相同工作的情况下,是否存在代码重用的首选模式?
我被要求不要使标签/ servlet实现一个公共接口来为A提供服务,也不要让供应商通过标签/ servlet使用它来访问服务。
答案 0 :(得分:2)
BundleContext
帮助程序类检索 FrameworkUtil
,然后可以使用它来访问要使用的服务。这是一个例子:
BundleContext bundleContext = FrameworkUtil.getBundle(A.class).getBundleContext();
ServiceReference serviceRef = bundleContext.getServiceReference(MyService.class.getName());
MyService myService = (MyService) bundleContext.getService(serviceRef);