2011-04-01 81 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