2010-11-08 26 views
7

Tôi đang gặp đoạn mã sau:Làm thế nào để tiêm phụ thuộc vào tài nguyên với Jersey?

@Path("stores") 
class StoreResources { 

    private ServerConfig config; 

    @GET 
    public String getAll() { 
    //do some stuff with ServerConfig 
    } 
} 

Và tôi cần đối tượng ServerConfig được tiêm vào lớp này từ bên ngoài và sử dụng nó bên trong phương pháp getAll().

Có cách nào để đạt được điều đó? Tôi có nên sử dụng khung DI như Guice hay Spring không?

Trả lời

5

Đây là một blog tốt về tiêm mùa xuân dưới Jersey http://javaswamy.blogspot.com/2010/01/making-jersey-work-with-spring.html

Kết quả cuối cùng là bạn sử dụng chú thích để lĩnh vực cờ mà là để được tiêm, một nguồn tài nguyên ví dụ là

package com.km.services; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 
import com.sun.jersey.spi.inject.Inject; 
import com.km.spring.SimpleBean; 

@Path("/hello") 
@Component 
@Scope("request") 
public class HelloResource { 

    @Inject private SimpleBean simpleBean; 

    @GET 
    @Produces("text/plain") 
    public String getMessage() { 
    return simpleBean.sayHello(); 
    } 
} 

Đối với mục đích của tôi cấu hình đã quá khó khăn nên tôi đã sử dụng một nhà máy giải quyết lò xo tĩnh để giải quyết đậu. ví dụ.

private SimpleBean simpleBean = SpringBeanFactory.getBean("mySimpleBean"); 
2

Bạn không cần Spring hoặc Guice để tiêm ServletConfig. Jersey thực hiện thông qua cơ chế tiêm của chính nó. Tham khảo ví dụ đơn giản-servlet đi kèm với phân phối mẫu Jersey. Đây là đoạn mã mẫu mà tiêm một HttpServletRequest và ServletConfig vào một tài nguyên:

@Path("/resource1") 
public class ResourceBean1 { 

    @Context 
    HttpServletRequest servletRequest; 

    @Context 
    ServletConfig servletConfig; 

    @GET 
    @Produces("text/plain") 
    public String describe() { 
     return "Hello World from resource 1 in servlet: '" + 
       servletConfig.getServletName() + 
       "', path: '" + 
       servletRequest.getServletPath() + 
       "'"; 
    } 

} 

Khi triển khai một ứng dụng JAX-RS sử dụng Servlet sau đó ServletConfig, ServletContext, HttpServletRequest và HttpServletResponse có sẵn để tiêm sử dụng @Context.

+5

Nó không phải là một 'ServletConfig', đó là một' ServerConfig', mà có lẽ là một đối tượng tùy chỉnh mà ông muốn được tiêm. – GuiSim

Các vấn đề liên quan