淘先锋技术网

首页 1 2 3 4 5 6 7

搭建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;