【问题标题】:Dependency injection in restful WSRESTful WS 中的依赖注入
【发布时间】:2012-07-04 01:43:00
【问题描述】:

我有简单宁静的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是jax-webservice的@Local接口。 我可以使用注解将IServiceJAX 注入ServiceRS 吗?
我不想使用 JNDI 查找...

【问题讨论】:

    标签: java rest dependency-injection ejb jax-ws


    【解决方案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 + " !";
        }
    }
    

    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);
        }
    }
    

    更新

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

    @Inject private IServiceJAX wsi;
    

    而不是

    @EJB private IServiceJAX wsi;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2014-06-12
      • 2013-04-10
      相关资源
      最近更新 更多