Java 用Spring实现泛型子类型的依赖注入
我试图将特定的泛型bean注入泛型子类型,但Spring无法解决依赖关系。通过从bean中删除类型,一切都按预期进行。以下是一个例子:Java 用Spring实现泛型子类型的依赖注入,java,spring,generics,dependency-injection,autowired,Java,Spring,Generics,Dependency Injection,Autowired,我试图将特定的泛型bean注入泛型子类型,但Spring无法解决依赖关系。通过从bean中删除类型,一切都按预期进行。以下是一个例子: public class AbstractFrom{ // ... } public class EmployyForm extends AbstractFrom{ // ... } public class CompanyForm extends AbstractFrom{ // ... } abstract class Ab
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
}
}
公共类抽象自{
// ...
}
公共类EmployyForm扩展了AbstractFrom{
// ...
}
公共类公司表单扩展自{
// ...
}
抽象类AbstractBean{
公开摘要无效计算(T形);
}
@组成部分
公共公司Bean扩展了AbstractBean{
公开作废计算(公司表格){
//特定impl
}
}
@组成部分
公共EmployeeBean扩展了AbstractBean{
公共作废计算(员工表格){
//特定impl
}
}
下面是一个目标类:
@Service
public BaseService{
@Autowire
public AbstractBean<AbstractFrom> baseBean; // <- NoSuchBeanDefinitionException
// @Autowire
// public AbstractBean baseBean; <- Injection works as is expected
}
@服务
公共基础服务{
@自动连线
public AbstractBean我知道您可能不会喜欢这样,但是为什么不将EmployeeForm和CompanyForm分离为两个单独的基本表单,然后在BaseService中为Autowire生成两个实体呢
这本身不是一个Spring答案,但这就是我要做的,作为一个快速的工作,看看它是否会起作用。
将它们分开并不是一个可怕的设计折衷。您是否尝试过自动连接公共抽象Bean它可以解决问题,但在我的情况下,这不是解决方案,因为我必须复制大量代码。从可维护性的角度来看,这是更糟糕的解决方案。无论如何,谢谢。