例如,我们有一些带有子资源的java-ws rs结构:
@Stateless
@Path("/rootpath/")
class Root {
@Path("/A")
public A getA {
...
}
@Path("/B")
public B getB {
...
}
}
@Stateless
@LocalBean
class A {
@GET
@Path("/getAStuff")
public String getAStuff(
@QueryParam("p") callback: String) {
return "A stuff";
}
@GET
@Path("/getAnotherAStuff")
public String getOtherStuff(
@QueryParam("p") callback: String) {
return "A stuff";
}
}
@Stateless
@LocalBean
class B {
@GET
@Path("/getBStuff")
public String getBStuff(
@QueryParam("p") callback: String) {
return "B stuff";
}
}
这种结构在实际(更广泛和更深)中要复杂得多。问题是 - getA& amp;的最佳方法是什么? getB实现?
我可以这样做:
public A getA {
return new A();
}
或者我可以使用EJB:
@EJB
A a;
public A getA {
return a;
}
或那样:
@Context
private ResourceContext resourceContext;
public A getA {
A a = resourceContext.getResource(A.class);
return a;
}
第一种方式让我有可能在Root类中读取p param,然后通过构造函数参数将其传递给A和B,而不在A和B的每个方法中使用它。但Java EE教程说我应该使用无状态EJB进行Web服务类。
答案 0 :(得分:1)
首先,永远不要自己构建EJB - 您手头有一个容器,它负责组件的生命周期。
其次,由于我假设您至少使用Java EE 6,因此对组件使用通用的@Inject
。
第三,您不必使用EJB,它也可以是CDI组件或普通POJO。
最后,我不明白,为什么你会在A
中为课程B
和Root
吸引人? @Path
注释也可以在您的类声明本身上。