J2EE-023 SSM框架注解整合和为什么不用根目录加载Bean原因

在XML配置 SSM框架上进行修改,如果对XML配置流程不懂的请看JSEE-021 XML配置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-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值