2012-03-22 1 views
1

簡易単純なプリミティブ型のパラメータ(文字列とint)を豆に注入する方法はありますか?私は必要なものGuiceを使用して簡単な設定パラメータをBeansに注入する方法は?

はspring.xmlからこのような何かのGuiceの同等物を見つけることです:

<bean id="aBean" ...> 
    <property name="fieldName" value="aStringValue"/> 
    <property name="anotherFieldName" value="123"/> 
</bean> 

値はコンストラクタが注入することができ、フィールドが注入されるか、または方法は、注入された、しかし、私は使用したくありませんBeanに渡す必要があるすべての値について、名前付きの注釈または工場またはプロバイダを分離します。

EDIT:私の解決策

ここでは、私が最終的に来たものです。私はそれが私が探しているものに最も近いと思うが、どんな改善も歓迎されるだろう。

私はモジュールで、私はプロバイダメソッドを宣言し、私は必要なすべてのプロパティを設定するために使用することが分かっ:

MyModule extends AbstractModule{ 
... 
    @Provides @Named("testBean") MyTestBean createTestBean(MembersInjector<TestBean> mi){ 
     TestBean test = new TestBean(); 
     mi.injectMembers(test); 
     test.setFieldName("aStringValue"); 
     test.setAnotherFieldName(123); 

     return test; 
     } 
... 
} 

良い点は、この方法は、(バインドを置き換える提供することである)Beanの実際の行数はあまり増加しません。

私は100%まだ副作用については確信していませんが、それは有望そうです。

+0

Googleを試しましたか? (例:http://code.google.com/p/guice-xml-config/) – Romain

+0

xmlを使用する必要がある場合は、春からマイグレーションしないでください:) – Rado

+0

「spring.xml "それは明らかに私にとってXMLであるように思えた。たぶんあなたがXMLを望んでいないと述べたのでしょうか?しかし、この場合、他に何がありますか? Plist?どのように良いですか? – Romain

答えて

1

プロパティを挿入するメカニズムが組み込まれています。

プロパティファイル:あなたの豆で

@Override 
protected void configure() { 
    Names.bindProperties(binder(), properties); 
} 

その後、

name=jan 
city=hamburg 

モジュール、ただ名前によって注入

含めて、あなたがこれを行うことができますカップルの異なる方法がありますが、
class Customer { 
    @Inject 
    @Named("name") 
    String name; 
    .... 
} 
+0

こんにちは、私は様々な理由のために名前付きプロパティを使用することはできませんが、私はアプローチを好きではない、名前の衝突が発生します。 – Rado

0

あなたのやり方で。 Providerメソッドを使用する際の唯一の欠点は、本質的に、手作業でロールバックして維持することを覚えておかなければならないことです。 (この特定のケースでは、コンストラクタインジェクションの利点も得られません)。

プロバイダメソッドが存在しない場合は、何らかの種類のバインディングアノテーションを使用する必要があります。 @Namedがうまく動作しない場合は、バインディングごとにアノテーションを作成する必要があります。

bindConstant().annotatedWith(FieldName.class).to("aStringValue"); 

public SomeClass { 
    public void setFieldName(@FieldName String fieldname) {} 
} 

場合によっては、プリミティブ/文字列インスタンスごとに1対1の注釈が必要になることがあります。しかし、私は、記述されている実際のインスタンスとは幾分直交するように注釈を作成しようとします。代わりに注釈を使用して、バインドされたオブジェクトと注入ポイントの関係を記述することをおすすめします。

これは常に可能ではないが、関連プリミティブのグループ全体は、次いで、潜在的に単一の結合注釈によって記述することができる限り、各プリミティブ型としてだけセットに一度使用されています。だから、これは仮説的に仕事ができる:

bindConstant().annotatedWith(MyAnnotation.class).to("aStringValue"); 
bindConstant().annotatedWith(MyAnnotation.class).to(123); 

括弧に挟まあなたは財産上の@Named注釈を使用できない理由を、私は好奇心旺盛だけど、あなたは注入さBeanでそれらを使用することができますか?

関連する問題