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的演讲
我知道您可能不会喜欢这个,但为什么不将 EmployeeForm 和 CompanyForm 分离为 2 个单独的基本表单,然后在 BaseService 中为 Autowire制作两个整体。
这本身不是 Spring 的答案,但这就是我要做的,作为一个快速解决方案,看看它是否有效。将它们分开并不是一个可怕的设计妥协。
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |