【发布时间】:2016-07-18 03:59:08
【问题描述】:
我定义了以下方法,返回一个表示子资源定位器(Jersey)的bean:
@Path("{slug}")
public PageResource page(
@PathParam("slug") String siteSlug) throws AppException {
siteService.getSiteBySlug(siteSlug); //Validate if exists, else throw error
return (PageResource) appContext.getBean("pageResource", siteSlug);
}
pageResource 在applicationContext.xml 中定义了原型范围。
问题:将 bean 注入当前类,同时在运行时传递构造函数参数的替代方法是什么?
我不习惯从应用程序上下文中显式获取 bean。
编辑@peeskillet:
子资源:
public class PageResource {
@Autowired
IPageService pageService;
String siteSlug;
public void setPageService(IPageService pageService){
this.pageService = pageService;
}
public PageResource(){}
public PageResource(String siteSlug){ //***Inject siteSlug from parent here***
this.siteSlug = siteSlug;
};
@POST
@Path("/pages")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public Response createPage(@NotNull @Valid Page page) throws AppException{
System.out.println(pageService);
ObjectId pageId = pageService.createPage(page);
page.setId(pageId);
return Response
.status(Response.Status.CREATED)// 201
.entity(page)
.header("Location",
"http://localhost:8000/zwoop-v001/sites/" + this.siteSlug +
"/pages/" + page.getSlug()).build();
}
}
【问题讨论】:
-
尝试将
ResourceContext注入主资源类并在定位器方法中返回context.getResource(PageResource.class) -
@peeskillet 抱歉回复晚了。我需要能够将参数传递给子资源类构造函数。
-
如果您正确配置了与 Jersey 的 Spring 集成,即您能够将 Spring bean 注入 Jersey 资源,那么使用上述方法也应该可以很好地注入子资源。
-
除此之外,你在谈论什么论点?只是要注入的 bean,还是其他一些参数?
-
@peeskillet 我的意思是将参数从父类传递给子资源的构造函数(如上例中的
siteSlug)。这里的问题是资源需要在运行时调用,即在请求期间,所以我不能预先定义构造函数参数。