使用spring和java ee 5将bean注入抽象类

时间:2013-05-14 12:26:13

标签: spring dependency-injection java-ee-5

我正在将一个Spring管理的bean注入一个抽象类,它似乎不起作用。以下是我所做的解释,如果还不够,我可以编辑帖子并添加一些代码:

  1. 实现java代码 - 1个抽象类,2个继承自它的类,以及要在抽象类中注入和使用的bean,以及子类。
  2. 在spring config中定义bean。
  3. 在spring config中定义抽象类和2个子类。
  4. 将第一个bean定义为抽象类bean的属性。
  5. 结果 - 它不起作用。

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

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

1 个答案:

答案 0 :(得分:11)

  

理论上不可能使用spring 3和Java EE 5将bean注入抽象类吗?

依赖注入发生在Object而不是Class上。 Spring将依赖项注入到托管bean中,这些bean是已经由Spring实例化的对象。因为,抽象类无法实例化,所以在这里考虑DI在概念上是错误的。

在某种程度上相关的说明中,您还可以通过将属性abstract=true添加到<bean>标记来将非抽象类定义为抽象Spring bean。这表明bean不会被实例化,并且只能作为其他bean可以通过bean继承使用的属性模板(根本不与Java继承相关)。

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