あなたSomeClass
のコンストラクタに注釈を付けるための最初の必要性:
class SomeClass {
@Inject
SomeClass(@Named("JDBC URL") String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
}
私はこのように、カスタム注釈を使用することを好む:
class SomeClass {
@Inject
SomeClass(@JdbcUrl String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface JdbcUrl {}
}
次に、あなたがあなたのモジュールに結合を提供する必要があります:
public class SomeModule extends AbstractModule {
private final String jdbcUrl; // set in constructor
protected void configure() {
bindConstant().annotatedWith(SomeClass.JdbcUrl.class).to(jdbcUrl);
}
}
そして、GuiceがSomeClassを作成し、パラメータを挿入する時。例えば、SomeOtherClassは工assに依存している場合:
class SomeOtherClass {
@Inject
SomeOtherClass(SomeClass someClass) {
this.someClass = someClass;
}
を多くの場合、あなたは文字列を挿入したいと思うとき、あなたがオブジェクトを挿入します。たとえば、StringがURLの場合、私はしばしば束縛注釈を持つURIを挿入します。
これはすべて、文字列のモジュール作成時に定義できる一定の値があることを前提としています。モジュール作成時に値が使用できない場合は、AssistedInjectを使用できます。
DI(依存性注入)は、これらのすべてのトリックで、コードをより困難にし、その起源の目標を失った。多くの場合、依存関係を注入するのはずっと簡単です。コンテキストを1か所に保持してください。これにより、メンテナンスがずっと簡単になります。 –