我有类AB及其实现AImplBImpl

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)
}


在春天我可以像

@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配置?

更新
我也不想用与弹簧相关的注释(例如@Component)来污染我的类。而且我更喜欢构造函数注入而不是任何其他注入。扫描也不是优选的解决方案。
那么,我可以Guice方式做Spring吗?

upd2

所以我想存档


自动接线
构造函数注入


不带


XML格式
路径扫描

最佳答案

可以使用自动装配代替使用Java代码创建Bean。您可以在Java配置中定义ComponentScan。您不需要使用任何XML文件。

10-08 09:33