搭建Spring MVC 环境。controller中加上@Controller注解 。启动项目时出现了错误:Cannot map handler 'TestController' to URL path [/hello]: There is already handler of type [class com.yxl.test.controller.TestController] mapped.
控制器类:
配置文件:
错误原因:
spring容器注册生成类的时候,每个类值允许注册一次。
在TestController类上面加@Controller会把TestController注册成bean。在配置文件中又把TestController类注册了一次,所以发生了错误。spring允许注解和xml同时注册bean。但是注册的名字必须一致。
其实仔细观察,TestController和xml的id名称是一样的。
由于在component-scan扫描TestController时默认生成的id是类名首字母小写,也就是testController。
解决方法有两个:
1. 把<bean>里的id改为和component-scan生成的一致即可,也就是
这样不仅注入了内容,而且只映射一次。
2. 删除该<bean>的xml注解,使用注解注入,java代码修改为
public class Login {
@Autowired
private IUserService userService;
...
}
前提是userService类必须可以可以被扫描到(可以用注解或xml配置userService类)。
若要注入配置文件也就是PropertyPlaceholderConfigurer配置的属性,
则应该用value注解,例如
@Value("${content}")
private String content;