gpt4 book ai didi

java - 使用 Spring 的通用子类型的依赖注入(inject)

转载 作者:搜寻专家 更新时间:2023-11-01 00:55:13 25 4
gpt4 key购买 nike

我正在尝试将特定的通用 bean 注入(inject)通用子类型,但 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
}
}

这是一个目标类:

 @Service
public BaseService{

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

// @Autowire
// public AbstractBean baseBean; <- Injection works as is expected
}

依赖于 Activity 配置文件仅初始化 CompanyBeanEmployeeBean,绝不会同时初始化。我也试过给 beans 和我们 @Qualifier 注释设置相同的名称。

是否存在如何使用菱形语法注入(inject)此 bean 的方式? Spring 是否能够解决给定的依赖关系?使用 Spring 4.2.x。


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

最佳答案

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

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

关于java - 使用 Spring 的通用子类型的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35984577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com