我正在编写使用 Spring MVC 的Web应用程序将Spring bean与类似REST的通道绑定。
我在以前的应用程序(纯XML配置)和使用<mvc:annotation-driven/>
功能的示例中创建了基本配置。我在spring xml文件中指向带有<context:component-scan base-package="my.package"/>
的控制器的包。
正在使用 Spring 3.0.6.RELEASE 。但是,升级到 3.1.0.RELEASE 后,我的控制器停止检测并且没有注册任何通道。 Spring上下文不包含HelloChannel
接口的实现。
这是这个Spring版本中的一个错误,还是我正在使用已弃用的配置,在新版本中停止支持?我没有得到任何错误或警告,只是没有自动检测到bean。
控制器接口定义如下:
@RequestMapping("/config") public interface ConfigChannel
实施:
@Controller
public class ConfigChannelImpl implements ConfigChannel
答案 0 :(得分:2)
Spring文档指出基于接口的@Controller
用于代理事务方法。因此,您可能正在使用<tx:annotation-driven />
标记。您现在看来的问题是Spring 3.1引入了对CGLIB的支持,CGLIB是一个基于运行时的字节码操纵器。您需要将proxy-target-class="true"
添加到事务配置中,并将CGLIB添加到类路径中。
<tx:annotation-driven proxy-target-class="true" />