2013-12-03 5 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にconfigが使用されていることを確認してください。これは、あなたの設定(glassfish、サーブレット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命名された場合、その後、あなたはweb.xmlファイル、サーブレットコンテナにMyApplicationを追加しても

public class MyApplication extends ResourceConfig { 

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

を行うことができます。

<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> 

春DIとジャージーを使用しての簡単な例をすることができます見つけられるhere