2013-05-14 473 views
8

我将一个Spring管理的bean注入到抽象类中,它看起来不起作用。这里是我做什么的解释,如果它不够,我可以编辑帖子并添加一些代码:将bean注入一个抽象类,并用spring和java ee 5

  1. 执行java代码 - 1个抽象类,2个继承自它的类和bean到被注入并用于抽象类,因此被子类使用。
  2. 在spring配置中定义bean。
  3. 定义了spring配置中的抽象类和2个子类。
  4. 将第一个bean定义为抽象类bean的属性。

结果 - 它不起作用。

然后我尝试将注入的bean从抽象类移动到两个子类中。现在它可以工作。

那么,我做错了什么,或者在理论上不可能用Spring 3和Java EE 5将bean注入抽象类?

回答

11

在Spring 3和Java EE 5中将bean注入抽象类在理论上是不可能的?

依赖注入发生在一个对象而不是它的类上。 Spring将依赖关系注入到被Spring实例化的对象中。因为,抽象类不能被实例化,所以在这里考虑DI在概念上是错误的。

在一个有点相关的说明中,您还可以通过在<bean>标记中添加属性abstract=true来将非抽象类定义为抽象Spring bean。这表明,豆将不会被实例化,并作为其他bean可以通过豆继承使用属性的纯粹模板(这是不是在所有涉及到Java继承)。

在这种情况下(如果你已经配置了它),依赖注入只会发生在子bean上,而不是他们的父bean,因为它已被定义为抽象。 (注意:父bean不是强制性的,但是这样做是有道理的,但它只是作为一组公共bean属性来运行。)

+0

感谢您的回复。但我读到,DI在Java EE 6的抽象类中是可行的,对吧? – user1414745 2013-05-14 12:42:55

+0

被注入的属性可以在抽象类中定义,但注入只会发生在一个Object上,这意味着它是一个子类对象。 – 2013-05-14 12:47:39