我有课程A
,B
以及他们的实现AImpl
,BImpl
.
interface A {
}
interface B {
}
interface C {
}
class AImpl{
@Inject
AImpl(B b){}
}
class BImpl{
@Inject
BImpl(String foo, C c){}
}
class CImpl{
}
要在 Guice 中配置依赖项,我会像这样编写 smt
bind(A.class).to(AImpl);
bind(C.class).to(CImpl);
@Provides B provideB(C c){
return new BImpl("foo", c)
}
在春天我可以做 smt like
@Bean public A a() {
return new AImpl(b())
}
@Bean public B b() {
return new BImpl("foo", c());
}
@Bean public C c() {
return new CImpl();
}
有几个缺点
- 我应该写下 AImpl 在 2 个地方(构造函数和配置)需要 B。
- 我应该编写更多代码(CImp 和 AImpl 需要创建方法而不是一个表达式)
有没有办法在不做 xml 的情况下改进我的 spring 配置?
upd 我也不想用 @Component 之类的 spring 相关注释来污染我的类。我更喜欢构造函数注入而不是任何其他类型的注入。扫描也不是优选的解决方案。那么,我可以用 Guice 的方式做 Spring 吗?
更新2
所以我想要存档
- 自动装配
- 构造函数注入
没有
- XML
- 路径扫描