Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用Spring实现泛型子类型的依赖注入_Java_Spring_Generics_Dependency Injection_Autowired - Fatal编程技术网

Java 用Spring实现泛型子类型的依赖注入

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

我试图将特定的泛型bean注入泛型子类型,但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
    }   
}
公共类抽象自{
// ...
}
公共类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它可以解决问题,但在我的情况下,这不是解决方案,因为我必须复制大量代码。从可维护性的角度来看,这是更糟糕的解决方案。无论如何,谢谢。