2016-03-23 14 views
1

現在、Foo型のオブジェクトをBarに挿入するには、次の操作を行います。Jerseyで単純なオブジェクトを挿入するには、ファクトリを使用する必要がありますか?

class Bar { 
    @Inject 
    Foo field; 

    public Foo getField() { return field; } 
} 

ファクトリーを実装するコード:メインコンフィギュレーションで

public class Foo implements Factory<Foo> { 
    @Override 
    public Foo provide() { 
     return new Foo(); 
    } 

    @Override 
    public void dispose(Foo f) { 
    } 
} 

コード:

final ResourceConfig rc = new ResourceConfig() 
       .packages("com.example") 
       .register(
         new AbstractBinder() { 
          @Override 
          protected void configure() { 
           bindFactory(new FooFactory()).to(Foo.class).in(Singleton.class); 
          } 
         }) 
に注入する

クラス

私の質問は...従属注入のためにhk2を使用するJersey 2.0では、とにかくファクトリクラスを作成せずにオブジェクトを挿入するのですか?

答えて

1

AbstractBinderFactoryまたはInjectionResolverなしで注射結合に使用することが可能である。

register(new AbstractBinder() { 
     @Override 
     protected void configure() { 
      bind(Foo.class).to(Foo.class); 
      bind(Bar.class).to(Bar.class); 
     } 
    }); 

この場合、FooとBarクラスは空のコンストラクタを持ちます。

public class Bar { 
    @Inject 
    Foo field; 
    public Foo getField() { return field; } 
} 

public class Foo {} 

これで、Barをリソースまたは他のhk2 beansに注入できます。

+0

クラスにパラメータを持つコンストラクタがあった場合はどうなりますか?これらのパラメータには@Injectも必要ですか? – oibe

+0

は使用できません。フィールドにのみ@Injectを使用するか、インスタンスを次のようにバインドします:bind(new Bar( "test"))。to(Bar.class); –

+0

一般に、より複雑な注入要求(例えば、補助噴射)のためには、InjectionResolverまたは工場を使用しなければならない。 –