我正在构建一个使用 SpringFramework 从 MongoDB 读取数据的项目,其结构为存储库 and Service如下:
Repository:
+ Interfaces:
- I <T extends Object>
- I1 extends I<M1>
- I2 extends I<M2>
+ Implements:
- RI Abstract RI<T extends Object>
- RI1 extends RI<M1> implements I1
- RI2 extends RI<M2> implements I2
Service:
+ Interfaces:
- SI <T extends Object>
- SI1 extends SI<M1>
- SI2 extends SI<M1>
+ Implements:
- Abstract SIIMPL : @Autowired I<?>
- SI1IMPL : extends SIIMPL<M1> implements SI1
- SI2IMPL : extends SIIMPL<M2> implements SI2
当我运行时,它抛出异常:
没有可用的类型“I”的合格 bean:预期单个匹配
豆但发现2:I1,I2
当我删除 RI2 时,它可以正常工作。在我看来,我认为根本原因是从抽象(SIIMPL)到另一个抽象(I)的@Autowired
2 个工具是 RI1 和 RI2,所以 spring 不知道选择什么 bean。
如果有人有任何想法,请给我留言。谢谢你!
首先,您应该在 Abstract SIIMPL 类中使用泛型而不是通配符。所以它看起来像:
public abstract class SIIMPL<T> {
protected I<T> foo; // Don't autowire here
}
然后如上所述,不要将通用 I 对象自动装配到抽象类中,只需在那里定义它,然后通过构造函数注入将其自动装配到具体类中:
public class SI1IMPL extends SIIMPL<M1> implements ST1 {
public ST1IMPL(@Autowired I<M1> foo) {
this.foo = foo;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)