2011-04-01 66 views
1

我使用的是spring + scala 2.8。我有一個@Transactional bean(用@Service標記),它在春天通過< tx:annotation-driven />啓用,當我啓動tomcat時,獲得@Autowired這個服務bean的控制器無法找到自動裝載候選人。我試圖弄清楚爲什麼找不到候選對象,當@Service對象明顯得到實例化時(我可以通過log4j調試消息看到這一點),我正在毆打自己。我最終決定通過註釋< tx:annotation-driven />來簡化它,瞧!該webapp開始罰款。tx:註解驅動的break @Autowired in scala

有人可以提供一個技術原因,爲什麼這不起作用?我即將嘗試@Qualifier以查看是否「修復」了問題。

+0

更新:我用@Qualifier,它仍然無法找到匹配的bean。 – Kevin 2011-04-01 19:24:03

+0

你能否提供一個證明問題的最小源代碼示例? – 2011-04-02 01:27:41

回答

0

所以我想通了,我的問題。它實際上可能已經被java和scala「打破」了。我的服務類只包含一個實現類,沒有接口。一旦@Transactional代理該類春天無法找到自動導線候選人。簡單地添加一個接口(或特徵在scala中)解決了這個問題。

0

當您將<tx:annotation-driven/>添加到您的配置中時,它會導致代理類發生各種包裝(請參閱Spring documentation on transactions)。這可能與@Transactional註釋和Scala不太匹配。

Use Spring @Transactional in Scala

+0

我認爲你在正確的軌道上與代理有關。我不確定你鏈接的線程是否完全相關,因爲我的事務bean是通過服務註釋進行管理的。 – Kevin 2011-04-02 05:25:41

+0

您必須研究Scala中的@Transactional如何與tx:annotation驅動的實現進行交互。同樣,一些示例源文件和應用程序上下文文件可能會有所幫助 – 2011-04-02 16:45:43

相關問題