spring <mvc:annotation-driven /> 和 <tx:annotation-driven />的区别
annotation-driven 这样的注解,其含义就是支持注解
一般根据前缀 tx、mvc 等也能很直白的理解出来分别的作用:
<mvc:annotation-driven>: 支持mvc注解(Controller中可以使用MVC的各种注解,例如因为这个标签创建了7个消息转换器HttpMessageConverter对象,Controller中可以使用使用@responsebody注解返回Object对象,否则只能返回String数据)
<tx:annotation-driven/>:就是支持事务注解的(@Transactional,在Service实现类里写@Transactional就可以启用事物管理),有一个transaction-manager属性用来指定使用哪个事务管理器
那么我们是否就可以在程序中所有被spring管理的类上都可以使用@Transactional注解了呢,在Service上可以使用@Transactional 注解这个是肯定的了,那总有些人也想弄明白能否在Controller 使用?答案显然是“不一定”的(与时间配置有关)
原因是:<tx:annoation-driven/>只会查找和它在相同的应用上下文件中定义的bean上面的@Transactional注解,如果你把它放在Dispatcher的应用上下文中,它只检查控制器(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。
所以,可以确定的是我们是可以在Controller上使用事务注解的,但是我们不推荐这样做