在XML配置 SSM框架上进行修改,如果对XML配置流程不懂的请看JSEE-021 XML配置SSM框架
J2EE-022 SSM框架注解整合
修改
spring-tx.xml
在spring-tx中,注释事务的注解管理器,扫描service层路径,标注注解
<tx:annotation-driven transaction-manager="transcationManager"/>
<context:component-scan base-package="ssm.mvc.service"/>
spring-mvc.xml
更改为包扫描方式
<context:component-scan base-package="ssm.mvc.controller"/>
给需要注入的Bean添加对应的注解。就完成了SSM的注解整合,接下来探讨为什么需要在spring-tx里对Service进行单独的Bean加载,对spring-mvc里进行单独的Controller进行注解
为什么需要事务单独注入
编码测试
spring-mvc其实是spring内部的一个空间,在spring-mvc里注入的东西,spring扫描不到,拿不到值。测试:
注释掉spring-tx里的扫描
将spring-mvc里的注入扫描改为根目录扫描
在service中故意抛出异常
添加测试代码
将之前的Set注入改为@autowired自动注入
测试结果:
抛出异常,数据却进去了
为什么事务没起作用讲解
这里发现我们的tx没有起作用为什么呢?我们只是改为了根目录进行扫描,没有进行其他的改变。
错误的加载
当我们注入spring-mvc根据根目录进行扫描的时候我们会依次加载进spring-mvc这个空间当中和spring-tx空间不一致,因此不能这个对象进行管理
如果我们把dao,controller,service放在spring容器下的时候,会把父容器对象通过setParent方法设置到spring-mvc当中
思考,如果我把controller交给tx创建可以么?
测试
1.移除spring-mvc里的注入
2.在spring-tx里进行controller的注入
结果
为什么找不到呢?因为在spring-mvc中我们注入了internalViewResolve视图管理器对象,视图管理器对象无法和controller对象建立链接所以找不到对象
正确的加载
只有将controller对象和internalviewResovle对象都交由spring-MVC管理建立联系,这就是为什么要扫描到目标类的原因
文章总结
还是以XML配置文件为主,这里没有讲解纯注解方式,因为不好维护,利用Results注解,在mybatis中有这个注解有个id属性,里面设置映射关系,并且只能设置查询方法上才能对所有的起效。一般都用mapper.xml文件进行配置sql语句方便进行管理测试。注解方法主要是进行了包扫描和属性自动方法的更改。另外简单讲解了一下为什么我们包扫描要进行具体类的扫描原因
代码
百度云
密码:5vin