ssm配置的事物不起作用

对于SSM框架,spring和springMVC都会对注解进行扫描。而且spring扫描的对象会先注入,springMVC扫描的对象会后注入,后注入的对象会覆盖先注入的对象。所以可能出现在spring里面配置了注解扫描和开启事务控制,在springMVC配置文件里面也开启了注解扫描但是没有开启事务控制,最后注解事务不生效的情况。这个就是由后注入的对象是没有开启事务控制的子对象导致的。还有种情况是注解扫描和事务开启的位置不一样(一个在spring配置文件中,一个在springmvc文件中),这样注解也不会生效还不会报错。解决办法都是在修改配置文件中的扫描范围,让springMVC只扫描controller层,由spring扫描service及dao层即可。需要单独设置不让springmvc扫描service注解。

注:在web.xml文件中,

context-param对应的是spring的配置文件,
  
  
org.springframework.web.servlet.DispatcherServlet对应的是springMVC的配置文件。
  
  

文件的名称可以自定义。

总的来说,针对上述两个问题,我们应该做以下几件事:

1.判断是不是springMVC配置文件和spring配置文件中同时开启了注解扫描。如果是,设置springMVC只扫描controller层,设置spring扫描service和dao层。(解决重复注入bean问题)。

2.如果没有1描述的问题,则判断开启注解事物的配置文件和扫描注解的配置文件是不是在同一个配置文件中。如果不是,则需要让两个配置放到同一个配置文件中(要么是springMVC的要么是spring的)。只有这样才能让spring bean都在springAop的管理下。

个人心得:其实最简单就是在spring的配置文件中扫描所有,在springmvc中只扫描controller层,这样事物就不会被springmvc所覆盖,事物就会起到作用,还有事物注解应该放到service的实现类上面或者实现类里面的方法上面,不能放到service的接口上面,如果一旦是对象代理不是接口代理事物一样不会起到作用

对于SSM框架,spring和springMVC都会对注解进行扫描。而且spring扫描的对象会先注入,springMVC扫描的对象会后注入,后注入的对象会覆盖先注入的对象。所以可能出现在spring里面配置了注解扫描和开启事务控制,在springMVC配置文件里面也开启了注解扫描但是没有开启事务控制,最后注解事务不生效的情况。这个就是由后注入的对象是没有开启事务控制的子对象导致的。还有种情况是注解扫描和事务开启的位置不一样(一个在spring配置文件中,一个在springmvc文件中),这样注解也不会生效还不会报错。解决办法都是在修改配置文件中的扫描范围,让springMVC只扫描controller层,由spring扫描service及dao层即可。需要单独设置不让springmvc扫描service注解。

猜你喜欢

转载自blog.csdn.net/good_luck_l/article/details/88547001