繁体   English   中英

Java Spring + Jersey 子资源:在运行时注入构造函数参数

[英]Java Spring + Jersey subresource: inject constructor-arg at runtime

我定义了以下方法,返回一个表示子资源定位器(泽西岛)的 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 ,并通过它解析子资源实例。

当子资源定位器方法要返回受管资源类的实例时,可以利用资源上下文。 此类实例将在声明的范围内注入和管理,就像根资源类的实例一样。

如上所述,您可以获得子资源类的实例,并且所有注入都将被处理

@Path("root")
public class Resource {

    @Context
    ResourceContext context;

    @Path("sub/{id}")
    public SubResource get() {
        return context.getResource(SubResource.class);
    }
}

@PathParam s 也被解析为注入到您的子资源实例中。 所以你可以这样做

class SubResource {

    @Autowired
    Service service;

    @PathParam("id")
    long id;
}

当子资源实例被解析时,它将被注入服务和路径参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM