我正在尝试将特定的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
答案 0 :(得分:0)
我知道您可能不会喜欢这个,但为什么不将EmployeeForm和CompanyForm分离为2个单独的基本表单,然后在BaseService中为 TWO 提供自动链接。
这本身并不是Spring的答案,但这就是我要做的事情,作为一个快速的工作来看看它是否有效。 将它们分开并不是一种可怕的设计妥协。