2013-05-14 69 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