我正在开发一个Spring MVC项目,并试图整合Apache Shiro的安全性。一切都在顺利进行,直到我意识到Hibernate在一次查询之后过早地关闭会话/连接并导致lazyinit异常。毫不奇怪,我在做的事情应该在交易中完成,所以会议不会结束。SpringTransactionAdvisorAutoProxyCreator与@Transactional导致问题
困境...
我试图把@Transactional我控制器的方法,但我得到404的即可。看看我的日志,我可以看到,当Spring引导时,如果@Transactional注释位于控制器内的任何方法上,它将忽略HomeController中的任何映射。
没有@Transactional,它加载得很好,而且Ih可以看到RequestMappingHandlerMapping bean在我的控制器中看到所有的@RequestMapping注解。
使用@Transactional但没有DefaultAdvisorAutoProxyCreator,它的工作原理除了Shiro注释被忽略。
tldr:四郎需要DefaultAdvisorAutoProxyCreator的,但如果我创建一个豆,春天使用@Transactional注释时炸毁。
我在寻求帮助,因为我完全处于如何在这一点上进行的损失。
好吧,可能那么因为正在创建的CGLIB代理不是携带@RequestMapping注释,推荐肯定会是上面的c点。 – 2012-08-10 16:21:37
对不起,意外提交了以前的评论,然后将其删除。我没有HomeController扩展或实现任何接口,所以它可能不是这样,虽然从那时起我是。也许类似的情况发生在DefaultAdvisorAutoProxyCreator为Shiro试图绑定的切入点创建AOP代理(纯java,而不是cglib)时?有没有办法为所有代理指定cglib? – 2012-08-10 16:24:41
噢,好吧 - 'proxy-target-class =“true”'强制执行@Transaction方案的基于CGLIB的代理。 – 2012-08-10 19:54:37