用Spring依赖注入Generic子类型

Pet*_*vic 5 java generics spring dependency-injection autowired

我试图将特定的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
    }   
}
Run Code Online (Sandbox Code Playgroud)

这是一个目标类:

 @Service
    public BaseService{

        @Autowire
        public AbstractBean<AbstractFrom> baseBean; // <- NoSuchBeanDefinitionException

        // @Autowire
        // public AbstractBean baseBean; <- Injection works as is expected
    }
Run Code Online (Sandbox Code Playgroud)

取决于活动配置文件仅初始化,CompanyBean或者EmployeeBean从不同时初始化.我也尝试过给bean和我们@Qualifier注释设置相同的名称.

是否存在使用菱形语法注入此bean的方法?Spring是否能够解决给定的依赖?使用Spring 4.2.x.


编辑: 应该可以使用Spring 4.3.见Juergen Hoeller的演讲

Bee*_*zer 0

我知道您可能不会喜欢这个,但为什么不将 EmployeeForm 和 CompanyForm 分离为 2 个单独的基本表单,然后在 BaseService 中为 Autowire制作两个整体。

这本身不是 Spring 的答案,但这就是我要做的,作为一个快速解决方案,看看它是否有效。将它们分开并不是一个可怕的设计妥协。