在网上找到很多关于SpringMVC的全注解的项目,但是或多或少有点毛病。其中最关键的毛病存在于事务处理这一块,不论是使用AOP的方式还是用Transactional的方式,事务都无法生效,而且程序也不报错。
这个问题存在于注解扫描,MVC应用会有一个对应的MVC.xml的配置文件,我这里暂时称为:dispatcher.xml
系统在初始化时,最后会通过org.springframework.web.servlet.DispatcherServlet 这个servlet来启动,在dispatcher.xml中,一般都会有描述信息,需要把Controller都扫描出来。
正是因为这个扫描,@Service的所有的注解都会失效。所以导致事务失效了。
解决这个问题很简单,扫描的时候增加一个filter就可以了。
<!-- 注解探测器 -->
<context:component-scan base-package="cn.system">
<!--
MVC模式中不在扫描Service的注解信息,以防事务不启作用
-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
这个毛病找了好几天,本来还打算用手动事务来驱动算了,不过我猜想就是标签注解的问题,在自己的耐心下终于解决了。
接下来就可以搞Spring Security了,之前还有很多篇文章都没有更新,例如:spring MVC系列,只能等到以后有时间了。
当爹了,更加忙了~~~
以上是项目的基本配置图,打了红框的没任何信息,因为已经使用了注解.
在这里顺便讲下注解的使用
注解标签:
- @Repository 一般用在Dao层
- @Service 一般用在Service层
- @Controller 一般用在逻辑控制层
@RequestMapping("/user") 映射的url地址 - @Resource 注入标签,不需要在写getter 和setter jdk1.6以上的版本都有这个标签
- @ExceptionHandler(Exception.class) 错误捕捉的标签
- @PostConstruct 构建式的标签,在初始化的时候非常有用 比如注入:super.setEntityManagerFactory(entityManagerFactory);
- @Autowired 也是注入标签,和@Resource的用法一样,这个标签是属于Spring自己的。