2013-04-14 78 views
0

創建成員我具有從上下文中創建一個bean,在這之後,自動裝配Autowired構件被創建:@Autowired不構造

@Service 
public class FileDownloadService extends WFWFileDownloadService { 
    @Autowired 
    ConfigurationManager configurationManager; 

當我在代碼手動構造函數調用使用:

FileDownloadService fileDownloadService = new FileDownloadService(); 

我看到ConfigurationManager中是空的,所以我不得不進行手動佈線:

public FileDownloadService() { 
     configurationManager = new ConfigurationManagerImpl(); 
    } 

我在做什麼錯使自動裝配與手動創建工作?

+0

確實ConfigurationManager是@Component?你使用組件掃描? 請提供信息,如應用程序上下文,web.xml 謝謝。 –

+0

我在下面看到了唐納的觀點,關於BEAN和OBJECT之間的區別。讓我們試着去這樣。非常感謝。 – mad

回答

2

當您直接調用構造函數時,您只是創建一個對象,而不是一個bean。 @Autowired註釋的支持是bean的一項功能。

詢問bean的Spring上下文。

+0

或者讓Spring向調用對象注入服務 –

+0

您能否爲我舉例說明如何獲取上下文? – mad

+0

它是從我的角度來看一個不好的做法... 彈簧保持簡單與註釋... 每隔變化只是使它複雜 –

1

如果您嘗試使用new運算符獲取bean,那麼您將獲得該類中的所有autowired beans,如null

您的服務等級注有@Service,所以要使用它,您應該自動裝配此服務等級。

示例代碼的其他類訪問服務bean是:

@Controller or @Component 
public class OtherClass { 

    @Autowired FileDownloadService fileService; 

    public void download() { 
     fileService.downloadFile(); 
    } 

} 

爲了這個類可以自動裝配其它豆類,這個類本身應該@Controller@Component進行註釋。

+0

謝謝,但我的問題是關於其他。請參閱Donal的答案。他很有道理。如果你想爲我做一個例子,那麼我會很感激。 – mad

相關問題