在restful WS中的dependency injection

我有简单的宁静WS

@Path("basic") public class ServiceRS { private IServiceJAX service; @GET @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public String find(@FormParam("searchRequest") final String searchRequest) { //... final List response = service.find(search); //... } } 

其中IServiceJAX是jax-webservice的@Local接口。 我可以使用注释将IServiceJAX注入ServiceRS吗?
我不想使用JNDI查找…

你当然可以。 虽然我认为还有其他方法,但我已经成功运行了一个简单的测试项目,其中包含@Stateless @WebServiceinterface @Local实现,通过@EJB注释注入到@Path注释的@Stateless RESTFul Web服务中。

根据您的要求,这不是适当的CDI注射,但它可以很好地工作,并且可能无论如何都符合您的需求。

IServiceJAX类:

 public interface IServiceJAX { public String hello(String txt); } 

IServiceJAXImpl类:

 @WebService(serviceName = "NewWebService") @Local @Stateless public class IServiceJAXImpl implements IServiceJAX { @WebMethod(operationName = "hello") @Override public String hello(@WebParam(name = "name") String txt) { return "Hello " + txt + " !"; } } 

ServiceRS类:

 @Path("basic") @Stateless public class ServiceRS { @EJB private IServiceJAX wsi; @GET @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public String result(@PathParam("id") String id) { return wsi.hello(id); } } 

UPDATE

如果你更喜欢CDI注入,你可以保留上面的代码,只需从IServiceJAXImpl删除@Local@Stateless注释。 您可以使用以下方法注入此类的实例:

 @Inject private IServiceJAX wsi; 

代替

 @EJB private IServiceJAX wsi;