私たちは、将来のモジュール化の取り組みのために JSR-330 アノテーションを使用した依存性注入を使用することを決定し、Guice 2 SVN に基づく最初の成果物に非常に満足しています。
ここで、必要な構造がプログラムで構成されたときにSpringでも機能することを単体テストを通じて確認し、文書化する必要があります(Guiceと同じリファクタリングサポートが必要なため、XMLファイルは必要ありません)。私は and に問題が@Provider
あります@Inject @Named("foo") String
が、次のもので簡単に@Inject
作業できました:
ApplicationContext ctx = new AnnotationConfigApplicationContext(LIBL_Object.class,
CORE_Provider.class);
this.object = ctx.getBean(LIBL_Object.class);
ここで、LIBL_Object は に注入される基本クラスですが、CORE_Provider は Spring 内で期待どおりに登録されません。
CORE_Provider の実装は
package qa.jsr330.core;
import javax.inject.Provider;
public class CORE_Provider implements Provider<ProvidedInterface> {
@Override
public ProvidedInterface get() {
return new CORE_Provided();
}
}
そして私はそれを注入したい
package qa.jsr330.core;
import javax.inject.Inject;
public class LIBL_Object {
private ProvidedInterface provided;
public ProvidedInterface getProvided() {
return provided;
}
@Inject
public void setProvided(ProvidedInterface provided) {
this.provided = provided;
}
// Other stuff omitted.
}
また、@Named タグを使用すると、構成値を非常に明確に渡すことができることもわかりました。このコードは次のようになります。
String hostname;
@Inject
public void setHostname(@Named("as400.hostname") String hostname) {
this.hostname = hostname;
}
次に、この文字列を Guice に登録します。
bindConstant().annotatedWith(Names.named("as400.hostname")).to(value);
したがって、2つの質問は次のとおりです。
@Provider
クラスをプログラムでSpring 3に登録するにはどうすればよいですか?- @Named が適切に選択できるように、文字列定数を Spring 3 に登録するにはどうすればよいですか?