Spring-第三章
还原web项目的Test_Shop到Test_Shop_SM
Spring集成MyBatis
步骤
1. 添加Spring,MyBatis相关jar包
参见共享,Test_Shop_SMjars
2. 复制applicationContext.xml,修改部分命名空间
3. 测试一个ProductService例子
回顾当前配置下的加载顺序
1. MyBatis的主配置文件mybatis-config.xml 和 工具类MyBatisUtil
2. Mapper文件
3. Dao接口
4. Service接口
5. Service实现
6. 测试端
替代mybatis-config.xml 主配置文件的功能
使用Spring来集成该功能,Spring的IOC来替MyBatis生成工厂的特殊对象
创建数据连接,即数据源 取代标签组
创建工厂 取代标签组和MyBatisUtil 工具类
加载JDBC的配置文件 独立配置文件
修改为动态参数
测试打印 SqlSessionFactory
完成MyBatis对象的引入
版本1:
使用Spring IOC 创建dao对象,同时注入sqlSession配置
使用Spring IOC 创建service对象,并持有dao对象的引用
service层的实现类,持有dao对象的引用,并创建对应的set和get方法
完成ProductService的查询例子
1. 检查原 MyBatisUtil工具类,依靠代理创建的对象
2. 对比Spring IOC创建的对象
3. 两者类型一致,说明Spring IOC创建的dao 对象
底层实现:SqlSession的MapperProxy代理实现
4. Spring-IOC 创建的sqlSessionFactory对象,会自动完成事务的提交和流的关闭
移除mybatis-config.xml 配置文件,MyBatisUtil工具类,及相关配置
版本2:
dao层的动态代理
1. 特殊类MapperScannerConfigurer根据value值,找到接口的包
2. 将该包下所有的接口类名,改为 标准的对象引用命名(驼峰命名)
3. 通过自动装配byType,实现自动注入SqlSession对象
4. spring 容器中拥有这些 标准的对象引用名,可以直接被引用
5. 底层实现:SqlSession的MapperProxy代理实现
Service层的自动装配
开启注解扫描,扫描Service的接口层
Service实现类标注注解
Service自动装配Dao对象,默认按照类型自动装配productDao
不再需要productService的bean标签和set/get方法了
Spring的专属Junit
总结:
1. Dao层的对象创建的底层实现,是MyBatis框架下的SqlSession对象,依靠MapperProxy动态代理技术实现
2. Service层的对象创建的底层实现,是依赖Spring-IOC 的bean-id来创建,不管是显示bean,还是自动装配。再底层细致,就是反射+无参构造方法
3. 层与层之间都必须有需要有Spring bean 的定义(不管是显示定义,还是隐藏定义)
4. 类与类之间的依赖 :
原始是通过在配置文件里写明ref实现;
升级后,靠注释自动装配@Autowired实现,但是底层还是靠ref实现
5. Spring的发展是代码和配置文件越来越简洁,通用代码被隐藏,但功能越来越强;
就像是社会的发展,原始是手工劳作,现在是机器自动化。
集成web
web.xml添加监听,用来加载Spring的主配置文件
标准配置文件路径
1. 将配置文件放入config文件夹 (日志配置文件保留在根目录)
2. 修改web.xml的监听路径
3. 修改applicationContext.xml的jdbc.properties路径
4. 修改SpringJunit 的注解applicationContext.xml路径
Test_Shop升级Spring架构
1. Spring集成MyBatis框架,删除mybatis-config.xml和MyBatisUtil.java
2. 修改Tesh_Shop_SM的业务逻辑层
3. 使用SpringJunit测试所有业务逻辑层代码