springMVC包扫描问题

为什么@COntroller要放在springMVC中?

@Controller注解的bean必须由DispatcherServlet初始化的children webApplicationContext来管理,在DispatcherServlet初始化的context中会扫描当前容器所有的bean实例,根据类级别以及方法级别的映射信息注解组装成对应的HandleMappering信息,但是ContextLoaderListener是不具备这个功能的。一句话spring中没有办法扫描controller的bean,所以spring中可以扫描所有的,但是对于@controller不会骑作用,所以必须在springMVC中再加一次对controller的扫描。

 

 

PS:之前遇到一个事物的,一开始把@Transactional放在COntroller怎么都不起作用,原因是只在spring中配置了 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>,而Controller没配,原因<tx:annoation-driven/>只会查找和它在相同的应用上下文件中定义的bean上面的@Transactional注解,如果你把它放在Dispatcher的应用上下文中,它只检查控制器(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。

posted @ 2017-05-05 11:09  贪吃的柳柳  阅读(1575)  评论(0编辑  收藏  举报