【发布时间】:2016-06-29 07:35:51
【问题描述】:
我正在尝试将特定的 Generic bean 注入到 Generic 子类型,但 Spring 无法解决依赖关系。通过从 bean 中删除类型,一切都按预期工作。这是一个例子:
public class AbstractFrom{
// ...
}
public class EmployyForm extends AbstractFrom{
// ...
}
public class CompanyForm extends AbstractFrom{
// ...
}
abstract class AbstractBean<T extends AbstractFrom>{
public abstract void calculate(T form);
}
@Component
public CompanyBean extends AbstractBean<CompanyForm>{
public void calculate(CompanyForm form){
// specific impl
}
}
@Component
public EmployeeBean extends AbstractBean<EmployyForm>{
public void calculate(EmployyForm form){
// specific impl
}
}
这是一个目标类:
@Service
public BaseService{
@Autowire
public AbstractBean<AbstractFrom> baseBean; // <- NoSuchBeanDefinitionException
// @Autowire
// public AbstractBean baseBean; <- Injection works as is expected
}
仅初始化 CompanyBean 或 EmployeeBean 的活动配置文件的依赖,从不同时初始化。我也尝试过给 bean 和我们的 @Qualifier 注释设置相同的名称。
是否存在如何使用菱形语法注入此 bean? Spring是否能够解决给定的依赖关系?使用 Spring 4.2.x。
编辑: 使用 Spring 4.3 应该是可能的。见Juergen Hoeller's talk
【问题讨论】:
-
您是否尝试过自动连接
public AbstractBean<? extends AbstractFrom> baseBean;?
标签: java spring generics dependency-injection autowired