当前位置: 首页 > 知识库问答 >
问题:

Spring中泛型参数化属性的注入

孟杰
2023-03-14
@Component
public abstract class AbstractFoo<V extends Bar> {

   @Autowired
   protected V bar;
}

@Component
public ConcreteFoo1 extends AbstractFoo<ConcreteBar1> {
}

@Component
public ConcreteFoo2 extends AbstractFoo<ConcreteBar2> {
}
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'foo.ConcreteFoo1'
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No unique bean of type [bar.Bar] is defined: 
expected single matching bean but found 2: [concreteBar1, concreteBar2]

我在Spring3.2.1中测试了类似的scenarion。解决此问题的最佳方法是什么?

这个问题是在09年3月10日报告的。
为什么在Spring中仍然没有实现这个功能?是否有任何并发症妨碍解决这一不足?

共有1个答案

丁学
2023-03-14

就像你写的那样:

  @Autowired
  protected Bar bar; 

Spring只是不能理解你想要注入ConcreteBar1

所以,您可以使用setter注入:

public abstract class AbstractFoo<V extends Bar> {
    protected V bar;
} 

@Component
public class ConcreteFoo1 extends AbstractFoo<ConcreteBar1>{

@Inject
private void setBar(ConcreteBar1 bar){
    this.bar = bar;
}
}
 类似资料:
  • Spring4包含了对泛型类型解析的主要增强,但当包含bean类的type参数被参数化时,我无法自动生成泛型类型。 我需要跟踪提交给外部服务的作业的状态,并且我想在每个作业启动时为其创建一个条目,并在收到回发时清除或更新它。我通常会尝试将持久性策略与服务接口分开,因此我有一个接口,一个Spring数据Mongo类。由于作业可能会在外部服务有机会为其分配ID(例如HTTP 502)之前失败,因此我需

  • 当我使用Jackson ectivtMapper将有效负载序列化为字符串值时,我很难获取要维护的泛型属性的类型信息。 我想要达到的结果如下。 我实际得到的结果如下(注意TestClassA缺少@type信息)。 我使用的测试是: “test JSON编组”测试中有两个版本。注释掉的版本和未注释的版本都会产生完全相同的结果。 第二个测试验证TestClassA本身是否生成了正确的类型信息。 只有当包

  • 问题内容: 该问题的可接受答案描述了如何在类中创建的实例。这涉及将参数传递给构造函数并从中调用方法。 然后创建的新实例,并传递参数。 如果新类的泛型类型参数不是某个已知类,但它本身是泛型类型参数,该怎么办?假设我还有其他班级,我想从该班级内部创建一个新实例。然后,如果尝试传递,则会收到以下编译器错误: 有没有办法解决? 对我来说触发错误的代码是: 发生错误,是因为我不会写。还有其他传递相同信息的方

  • 这个问题的公认答案描述了如何在类中创建的实例。这涉及将参数传递给构造函数,并从中调用方法。 然后创建的新实例,并传入参数。 对我来说,触发错误的特定代码位是: 错误发生,因为我不能编写。还有其他方式传递同样的信息吗?

  • 本页包含内容: 泛型形参子句 泛型实参子句 本节涉及泛型类型、泛型函数以及泛型构造器的参数,包括形参和实参。声明泛型类型、函数或构造器时,须指定相应的类型参数。类型参数相当于一个占位符,当实例化泛型类型、调用泛型函数或泛型构造器时,就用具体的类型实参替代之。 关于 Swift 语言的泛型概述,见泛型(第二部分第22章)。 泛型形参子句 泛型形参子句指定泛型类型或函数的类型形参,以及这些参数的关联约

  • 问题内容: 在C#中,我实际上可以这样做: 但是由于某种原因,我无法使其在Java中工作。 我要做的是在超类上创建一个静态方法,以便可以将子类转换为XML。 问题答案: 称为: 或更明确地: 更令人困惑的是,您可以拥有既构造泛型类型又具有泛型参数的构造函数。不记得该语法,也从未在愤怒中使用过它(无论如何,最好还是使用静态创建方法)。 强制转换是不安全的,并且您不能编写T.class。因此,将T.c