2013-12-03 71 views
6

我正在使用RESTful服務的項目。我有模塊作爲Web層,業務層等。我添加了基本的api圖層(使用球衣),並獲得了獲取請求的基本響應。現在我必須將它連接到業務層。我是谷歌搜索,但我不知道如何實施每個解決方案,我的項目。從業務層的澤西島的基本依賴注入

這是我的行程資源類:

@Path("trip") 
public class TripResource { 

    @Context 
    private UriInfo context; 
    @Inject 
    private AdminService adminService; 

    public TripResource() { 
    } 

    @GET 
    @Produces("text/plain") 
    public List<TripDTO> getText() { 
     return adminService.listAllTrips(); 
    } 

} 

,這我使用的添加資源類:

@javax.ws.rs.ApplicationPath("api") 
public class ApplicationConfig extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 
     addRestResourceClasses(resources); 
     return resources; 
    } 
    private void addRestResourceClasses(Set<Class<?>> resources) { 
     resources.add(cz.infi.javatravelagency.ServiceResource.class); 
     resources.add(cz.infi.javatravelagency.TripResource.class); 
    } 
} 

我的pom.xml:

<name>JavaTravelAgency - Api module</name> 
    <dependencies> 
     <dependency> 
      <groupId>cz.infi</groupId> 
      <artifactId>javatravelagency-business</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-moxy</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>7.0</version> 
      <type>jar</type> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <!-- Java language version --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>6</source> 
        <target>6</target> 
       </configuration> 
      </plugin> 
      <!-- Servlet 3.0 without web.xml --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

我試着按照answer in this link。我只是補充道:

public class MyApplicationBinder extends AbstractBinder { 
    @Override 
    protected void configure() { 
     bind(AdminServiceImpl.class).to(AdminService.class); 
    } 
} 

現在我被卡住了。

如何將此活頁夾添加到我的配置類? 沒有使用任何其他技術,最簡單的實現是什麼?

回答

9

這也花了我很多時間。

嘗試以下操作:

  1. 添加HK2活頁夾到您的項目如下所述:https://jersey.java.net/documentation/latest/migration.html

在這裏,你必須綁定添加到您的業務邏輯。 您已經擁有這一隻(爲了完整而添加)。

e。 G。

public class MyBinder extends AbstractBinder { 

    @Override 
    protected void configure() { 
     // request scope binding 
     bind(MyInjectablePerRequest.class) 
       .to(MyInjectablePerRequest.class) 
       .in(RequestScope.class); 
     // singleton binding 
     bind(MyInjectableSingleton.class).in(Singleton.class); 
     // singleton instance binding 
     bind(new MyInjectableSingleton()).to(MyInjectableSingleton.class); 
    } 
} 

然後添加一個「ResourceConfig」類項目,並註冊您的粘結劑喜歡這裏:http://sleeplessinslc.blogspot.de/2012/10/jax-rs-20-jersey-20-preview-example.html

在你的情況,你可以簡單地從ResourceConfig而不是ApplicationConfig擴展您ApplicationConfig(這是我做的) 。所有在「getClasses()」中註冊的類都應該如下所述。

e。 G。

/** 
* Application config 
*/ 
public class ApplicationConfig extends ResourceConfig { 

    public ApplicationConfig() { 
     register(SomeResources.class, SomeProviders.class); 

     // Register different Binders 
     addBinders(new MyBinder()); 
    } 
} 

至少要確保您的web.xml使用配置。這取決於您的設置(glassfish,servlet v1/v2等)

由於您已經在使用ApplicationConfig類,所以很有可能您已經使用了正確的設置。

再次這裏有一個例子:

<servlet> 
    <servlet-name>om.example.package.to.your.config.ApplicationConfig</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.example.package.to.your.config.ApplicationConfig</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

希望這將幫助;)

問候 本


發現了一個類似的帖子現在: Dependency injection with Jersey 2.0

-5

你需要註冊y我們的資源類與澤西島。所以,如果您的應用程序被命名爲MyApplication,那麼你可以做

public class MyApplication extends ResourceConfig { 

    /*Register JAX-RS application components.*/ 
    public MyApplication() { 
     register(TripResource.class); 
    } 
} 

另外在web.xml文件中添加MyApplication到servlet容器:

<servlet> 
    <servlet-name>SpringApplication</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>mypackage.MyApplication</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

使用澤西與Spring DI一個簡單的例子可以被發現here