2016-03-14 58 views
5

我正在尝试将特定的泛型bean注入泛型子类型,但是Spring无法解析依赖关系。通过从bean中删除类型,一切都按预期工作。下面是一个例子:Spring的泛型子类型的依赖注入

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 
    } 

所依赖初始化仅CompanyBeanEmployeeBean,从未两者。我也试着给豆子和我们设置相同的名字@Qualifier注释。

确实如何使用菱形语法注入此bean? Spring能够解决给定的依赖关系吗?使用Spring 4.2.x.


编辑: 使用Spring 4.3应该是可能的。见Juergen Hoeller's talk

+0

您是否尝试过自动装配'public AbstractBean <?扩展AbstractFrom> baseBean;'? – SimY4

回答

0

我知道你可能不会喜欢这一点,但为什么不分离出EmployeeForm和CompanyForm到2种独立的基础形式,然后在BaseService使 entires,对于自动装配。

这不是Spring本身的答案,但这是我会做的,作为一个快速解决方案,看看它是否会工作。 分离它们并不是一个可怕的设计妥协。

+0

它会解决这个问题,但这不是我的解决方案,因为我将不得不复制很多代码。在可维护性方面,这是更糟糕的解决方案。不管怎么说,还是要谢谢你。 –