@Provides 是否需要使用@Named 参数?
Is @Provides necessary with @Named parameter?
说,我有一个类似下面的模块:
public class TestModule extends AbstractModule {
@Override
protected void configure() {
}
@Provides
@Singleton
public A getA(final B b) {
A a = new A(b, getC());
return a;
}
@Provides
@Singleton
private B getB(@Named("someName") final String someName) {
......
}
private C getC() {
.....
}
}
这里的问题是,如果 B 仅在 TestModule 中使用,那么我是否需要 @Provides 和 @Singleton 来获取 getB。我不确定 @Named 作为参数,我是否需要在方法上使用 @Provides。
因为如果我不需要它,那么我可以简单地删除getB上的所有注释,它会简单如下:
public class TestModule extends AbstractModule {
@Override
protected void configure() {
}
@Provides
@Singleton
public A getA() {
A a = new A(getB(), getC());
return a;
}
private B getB(@Named("someName") final String someName) {
......
}
private C getC() {
.....
}
}
这句话读起来可能会有所帮助:
@Provides
@Singleton
@Named("someName")
B getB(SomeArg arg, SomeOtherArg other) {
//make the thing
}
"This method @Provides
a @Singleton
which is @Named
someName
, with type B
. Here are the things which are used to make it (method params), and here is how you go about building it (method body)."
@Provides
B getB(@Named("someName") final String someName) {
//make the thing
}
"This method @Provides
an instance of B
. In order to create it, a String
which is @Named
"someName"
will be required, and here is how you go about building it (method body)."
请注意,@Named
与任何其他限定符一样,不仅可以在方法上注释,还可以在参数上注释,实际上是说 "does this describe the thing being provided" 或 "does this describe the thing which is required"。它的存在不足以将方法标记为提供者。
注解 @Provides
是创建该绑定类型时应调用的方法所必需的,因此不是可选的。注解 @Singleton
在技术上是可选的,但省略它意味着实例 returns 将不是单例,这可能对您的需求有意义,也可能没有意义。如果不需要,一般的最佳做法是避免将某些内容设为单例。
说,我有一个类似下面的模块:
public class TestModule extends AbstractModule {
@Override
protected void configure() {
}
@Provides
@Singleton
public A getA(final B b) {
A a = new A(b, getC());
return a;
}
@Provides
@Singleton
private B getB(@Named("someName") final String someName) {
......
}
private C getC() {
.....
}
}
这里的问题是,如果 B 仅在 TestModule 中使用,那么我是否需要 @Provides 和 @Singleton 来获取 getB。我不确定 @Named 作为参数,我是否需要在方法上使用 @Provides。
因为如果我不需要它,那么我可以简单地删除getB上的所有注释,它会简单如下:
public class TestModule extends AbstractModule {
@Override
protected void configure() {
}
@Provides
@Singleton
public A getA() {
A a = new A(getB(), getC());
return a;
}
private B getB(@Named("someName") final String someName) {
......
}
private C getC() {
.....
}
}
这句话读起来可能会有所帮助:
@Provides
@Singleton
@Named("someName")
B getB(SomeArg arg, SomeOtherArg other) {
//make the thing
}
"This method @Provides
a @Singleton
which is @Named
someName
, with type B
. Here are the things which are used to make it (method params), and here is how you go about building it (method body)."
@Provides
B getB(@Named("someName") final String someName) {
//make the thing
}
"This method @Provides
an instance of B
. In order to create it, a String
which is @Named
"someName"
will be required, and here is how you go about building it (method body)."
请注意,@Named
与任何其他限定符一样,不仅可以在方法上注释,还可以在参数上注释,实际上是说 "does this describe the thing being provided" 或 "does this describe the thing which is required"。它的存在不足以将方法标记为提供者。
注解 @Provides
是创建该绑定类型时应调用的方法所必需的,因此不是可选的。注解 @Singleton
在技术上是可选的,但省略它意味着实例 returns 将不是单例,这可能对您的需求有意义,也可能没有意义。如果不需要,一般的最佳做法是避免将某些内容设为单例。