2013-07-05 104 views
1

的Javadoc以SqlSessionDaoSupport班說:自動裝配在MyBatis的彈簧1.2.0

... @自動裝配Autowired從setSqlSessionTemplate刪除, setSqlSessionFactory在1.2.0版本。

爲什麼?在這種情況下,我必須manualy設定的SqlSessionFactory我DAOS還測試類(我使用DbUnit的持久性測試)

+0

嘗試從xml上下文文件注入它 – Elbek

+0

我有超過50個daos來擴展這個類,並且使用組件掃描來聲明daos。你建議mannualy在xml中聲明50個daos嗎? – maks

+0

我也有許多測試類也擴展了這個類(可能不是直接)。我是否也要在xml文件中聲明測試類? – maks

回答

2

@Autowired輾轉根據這個問題:https://code.google.com/p/mybatis/issues/detail?id=763

作爲一個通用目的的框架,MyBatis的不應該產生強烈的斷言,比如「ApplicationContext中只有一個sqlSessionFactory」,這就是爲什麼@Autowired已被刪除。

作爲一種變通方法,您可以編寫自己的MyAppSqlSessionDaoSupport擴展SqlSessionDaoSupport,並覆蓋setSqlSessionFactory(...)

@Autowired 
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { 
    if (!this.externalSqlSession) { 
    this.sqlSession = new SqlSessionTemplate(sqlSessionFactory); 
    } 
} 

然後,讓你的DAO擴展MyAppSqlSessionDaoSupport而不是SqlSessionDaoSupport

+0

對於我來說,我應該寫一個覆蓋該方法的類,並從該類擴展所有的類,但問題的目的是爲了移除該註釋。好的,Autowiring sqlSessionFactory和模板有一些問題,爲什麼不移除一個註釋? – maks

+0

當你看到你的問題和你的評論時,你並不是很清楚。但是,還有一點不清楚,就是'@ Autowired'斷言只有一個特定類型的bean存在於應用程序上下文中,而可能有幾個?一個應用程序可以有幾個SqlSessionFactory,另一個可以有幾個SqlSessionTemplate。 –

+0

據我所知,當一個bean假裝自動裝配時,spring會在啓動時拋出異常 – maks