2014-10-31 57 views
0

當我運行mapRowcompile()完成。錯誤給我Property 'dataSource' is required。我有這個在我的XML春天的jdbc在住宅「數據源」是必需的或空指針

<bean id="ProcedureRepository" class="mypackage.ProcedureRepository"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

我的Java ProcedureRepository

private DataSource dataSource; 

@Resource 
@Qualifier("dataSource") 
public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

public String searchCode(String code){ 
    new SeachCode(dataSource).execute(code); 
    return code; 
} 

我SeachCode

public class SearchCode extends StoredProcedure{ 
public SearchCode(DataSource dataSource) { 
    super(dataSource, "MYPROC"); 
... 

compile(); 

當我把這個它發生:

ProcedureRepository procedureRepository = new ProcedureRepository(); 
procedureRepository.searchCode(parameters.code); 

我不知道我失蹤的地方,我試着去在我的XML添加新豆,但沒有成功,同樣在SearchCode

+0

不要自己創建一個新的實例。使用上下文中的bean。 – 2014-10-31 12:20:59

回答

0

添加新setDataSource當您使用new創建倉庫,你剛開對象不是由Spring容器管理。如果你想得到一個Spring bean,它具有Spring注入的所有依賴,你可以從Spring應用程序上下文中獲得它。 例如:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("path to spring app context xml file)");  
ProcedureRepository repo= (ProcedureRepository) applicationContext.getBean("ProcedureRepository"); 
repo.searchCode(parameters.code) 

Here你可以閱讀更多關於春應用方面越來越豆。

+0

這是我能做到這一點的唯一途徑?如果我不想使用該路徑怎麼辦?我的web.xml已經在上下文中。 – fsi 2014-10-31 12:29:42

+0

因此,如果它是一個web應用程序,通過使用web.xml中定義的ContextLoaderListener在啓動期間初始化spring context。在這種情況下,您可以創建某種服務,這將使用您的存儲庫或控制器。只需在您的應用程序上下文定義,並設置存儲庫作爲使用調節器或構造器注入的依賴。 – pomkine 2014-10-31 12:38:25