2017-03-18 32 views
0

我正試圖找出Java對象正在實例化的地方。我有一個春天控制器和控制器是dataService場:找不到@Resource對象在Spring xml中實例化的地方

@SuppressWarnings("restriction") 
@Controller 
public class DataController { 

    /** 
    * Service for which to delegate retrieval of data 
    */ 
    @Resource 
    private DataService dataService; 

DataService是一個接口,實現這個服務是DataServiceImpl類)。

根據我的理解,當@Resource在一個字段的上方時,它表示該對象使用一個通常在xml文件中定義的spring bean實例化。然而,我已經在我的工作區中搜索了這個對象的名字(以及許多變體),並且查看了項目中所有常見的spring bean位置,但我無法在任何地方找到任何提及。有誰知道這裏會發生什麼?

回答

1

從春天框架文件,

@Resource有一個name屬性,缺省時,Spring解釋 該值作爲bean的名字將被注入。如果沒有明確指定名稱,則默認名稱是從字段名稱或setter方法派生的。如果是字段,則需要字段名稱;在一個setter方法的情況下,它需要bean屬性名稱

如果name屬性不設置彈簧然後落入背朝自動裝配,這將搜索和注入匹配type.So DataServiceImpl可以在被定義的豆spring bean xml文件或使用@Component註釋。

在@Resource的使用沒有明確的名稱指定 專屬的情況下,和類似@Autowired,@Resource發現的主要 類型匹配,而不是一個具體的bean並解決知名 解析依賴。

More on @Resource.

+0

是啊,我搜索了類似'DataServiceImpl','DataService'等在我的Spring beans任何東西,但無法找到任何東西。 'DataServiceImpl'類看起來像這樣,它確實有'@ Service'註釋,但即使我們認爲它需要一個spring bean定義? '@服務 公共類DataServiceImpl實現的DataService {' – Stackman

+1

@Stackman如果類都被註解'@ Service'這是@Component的''專業化然後春天將創建一個類的bean,並注入它無論它被稱爲。在這種情況下,你不需要在bean xml文件中定義它。 – Rohan