To resolve the problem, bellow are two solutions:
1. Please avoid scanning the repository and service packages in the mvc context: this context should only care about mvc-related beans. When Spring injects a service in a controller, it would not find the service in the mvc context, and thus look it up, and find it in the main context. The transactional service would be injected.
2.Please use a single context: the one of the servlet, where all the beans in the application would be defined.