依赖注入宁静WS(Dependency injection in restful WS)

2019-09-19 01:17发布

我有简单的REST风格的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<Info> response = service.find(search);
//...
   }

}  

其中IServiceJAX@Local JAX-Web服务的接口。 我可以注入IServiceJAXServiceRS使用注释?
我不想使用JNDI查找...

Answer 1:

你当然可以。 虽然我想还有其他的方法,我已经成功地运行了一个简单的测试项目@Stateless @WebService@Local实现的的interface ,通过注入@EJB标注成@Stateless带有加注解的RESTful Web服务@Path

这不是一个正确的注射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 + " !";
    }
}

服务机构类:

@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注射,可以保持上面的代码,只需去除@Local@Stateless从注释IServiceJAXImpl 。 您可以使用注入这个类的一个实例:

@Inject private IServiceJAX wsi;

代替

@EJB private IServiceJAX wsi;


文章来源: Dependency injection in restful WS