Spring
1、Spring系统架构
2、核心概念
3、IoC入门案例
导坐标:
有了容器,配置bean(容器管理的东西,里面应该是实现的类哦,不是类接口!):
配置容器的配置文件
接下来就可以获取接口,然后获取bean,使用对象:
总结:
这里有接口和接口的实现,容器管理的可不是接口而是实现的类对象。注意这里还是使用了new,没有完全解耦——>DI
4、DI入门案例
容器配置文件中不仅要声明管理哪些bean,还可以给bean设置参数(可管理两个bean的关系)。业务层的service还有new,删了,然后加一个set方法为其赋值,那么set谁来调用啊??其实容器里面就相当于是声明一个它管理的对象,那么可以将参数的设置移到这里。
业务层更改:
配置文件:
总结:
5、bean
5.1 配置
从容器中获取的bean是单例吗?
5.2 bean实例化
之前我们说的构造方法必须是public的,但是在spring中使用了一种反射的方法,即使是私有的也可以。
方法二:
有工厂类名和类中方法
方法三:
静态的方法不用工厂实例,但是非静态(将orderDao前的static删了)需要一个工厂对象才能调用其中的方法
仍有上图中两个问题存在,使用factorybean(需要指定泛型,实例化几个名字固定的函数):
这里要注意,创建的就不是userdaofactorybean对象了,而是它里面的getobject对象
总结:
5.3 bean生命周期
这里afterPropertiesSet 参数设置之后调用,也就是如果下图展示:先输出了set.....
总结:
注意,加载初始化容器时进行的4小步,容器内的bean就都加载了,所以无论获不获取,对应的方法都执行了。
6、bean依赖注入
6.1 setter
6.2 构造器
构造函数(以前用set,现在用构造函数)
但这样name后面应该是构造函数中的形参,不是属性名!!!所以不太方便啊:所以可以不写name,使用形参的类型区分或是位置区分。
总结:
6.3 依赖自动装配
6.4 集合注入
使用setter注入:
ex:bookdao实现如下:
配置文件中传参:
6.5 第三方数据源管理
ex:
导入坐标,如数据库连接池druid
但这些property很多,写在配置文件中不方便
6.6 加载property文件
文件内容如下:
配置文件:
有个问题:property文件中如果出现了系统变量冲突的名字,那么加载时肯定是优先系统变量,如果不想这样,在加载配置文件的时候多写一个参数,关闭系统变量方式:
7、容器
之前加载容器都用的:
这只是一种方式。
总结(5 6 7)
三部分:
8、注解开发
9、spring整合mybatis
10、spring整合JUnit
11、AOP
11.1 简介
11.2 入门案例
11.3 工作流程
11.4 切入点表达式
11.5 通知类型
11.6 案例:业务层接口执行效率
测试类中的内容:
通知类:
11.7 AOP通知获取数据
若切入点的函数有参数和返回值,那么在通知函数中如何获取返回值或是参数呢?注意的是五种通知类型,并不是每一种都可以获取到参数或是返回值:
1. 获取参数:
getArgs() 获取所有参数,返回一个参数类型的数组。此外若通知函数中形参需要多个,若有获取参数的形参,他必须在第一位!!!
11.8 案例:百度网盘密码数据兼容处理
主函数:(密码是root,但要求输入(root后面还有个空格)root ,也能通过)
使用环绕通知处理:
11.9 AOP总结
切入点:
通知:
获取参数:
12、事务
12.1 事务简介
基本情况:
业务层:
数据层:
测试类:
使用事务:
若transfer中间出现异常,就完咯,所以这个操作是需要开启事务的。
12.2 事务角色
12.3 事务属性
1 其实回滚不是只要异常就回滚,只有error和运行时异常会,其他不会,如IOException就不会,若 想要回滚,可以配置:
2 案例:
基于上面的操作,增加一个记录操作:
日志数据库:
业务层多一个记录的接口和实现类:
调用了数据层(结合了mybatis,mapper(使用mapper接口对象调用接口中的方法,这一步在service中实现,同时不想new了,所以将其变为一个属性,通过bean的自动装载实现(不自动就是setter和构造器方法)),注解方式开发的,不用注解还要有sql的配置文件):
转账追加功能:
但不对,失败了,记录日志的行为也要回滚,怎么办?
记录的这个事务应单开一个事务:
总结:
SpringMVC
1、SpringMVC基本介绍
1.1 概述
原先的servlet实现增删改查:
而SpringMVC,一个文件就可以实现增删改查,里面的代码也简单了:
1.2 入门案例
记得加Tomcat插件坐标
这一步获取ctx可与以前不一样,这是web程序。
ex
使用到的一些注解:
1.3 入门案例工作流程
1.4 bean加载控制
这一段代码有简化开发方法:
1.5 PostMan
第一章总结
2、请求与响应
2.1 请求映射路径
为了避免路径重复冲突:
2.2 请求参数
2.2.1 请求响应
若post有中文乱码呢?在启动服务器也就是初始化web容器时处理:
2.2.2 五种类型请求参数
①
②
③
④
⑤
2.2.3 json数据传递参数
先加json坐标
json可传三种数据:
数组(上面),pojo对象,pojo数组
注解:
2.3 日期类型参数传递
内部如何工作——converter接口:
2.4 响应
2.4.1 响应页面
它将对象数据转成json,由下面接口实现:
第二章总结
3、REST
3.1 简介
3.2 入门案例
3.3 RESTful快速开发
这两部分太重复了,提出来写到类前面。每次都要定义method,有点长 也麻烦。
解释:
3.4 案例
配置类:
domain:
数据层:暂时没写,模拟的
controller:
然后还要配置成 RESTful 格式:
好了,可以开启服务器测试了。
4、SSM
4.1 整合配置
4.2 功能模块开发
4.3 接口测试
4.4 表现层与前端数据传输协议定义
4.5 表现层与前端数据传输协议实现
4.6 异常处理器
正常程序得到数据,异常就会抛出,那么异常如何处理?(目的是想要即使出现异常,前端也能收到消息,知道出问题了)
异常类型:
异常需要分类处理——>都放在表现层
——>处理异常的操作很多很重复,所以可以用AOP
ex:
解析:
定义好异常处理类后:
4.7 项目异常处理
首先会对异常分类:
创建系统异常处理类(因为系统异常和其他异常返回的消息一样)和业务异常处理类:
4.8 前后台协议联调
5、拦截器
SpringBoot
第一章 入门案例和简介
1、入门案例
分析:
全靠下面两个文件咯
不用idea,也可以基于SprinBoot官网创建项目。
2、程序快速启动
spring boot 可以脱离idea和Tomcat运行:
然后在命令行执行:
3、springboot 简介
3.1 起步依赖
3.2 辅助功能
3.3 切换web服务器
默认Tomcat,可使用排除依赖排除了它:
现在再启动就没有Tomcat了,可以换成jetty服务器:
总结
第二章:基础配置
4、配置文件格式
yml和yaml文件不自动提示:
5、yaml
5.1 yaml格式
5.2 yaml数据读取
法一:
法二:使用独立对象将所有对象都加载出来:
法三:
6、多环境开发
6.1 配置
properties配置文件的书写形式:
6.2 多环境启动命令格式
打包,然后命令行运行:
第一条指定环境为test,不指定就用默认的,也可以使用临时的端口,配置文件中没有。
有点坑:
打包前可以先clean,清理一下;也可能会出现中文原因打包失败——>改编码方式:
6.3 多环境开发兼容问题
如当maven和boot都进行了多环境开发的配置,谁为主?当然是maven,它执行的打包操作。
7、配置文件分类
问题:
第三章 整合
8、整合Junit
省略class,但不在同一个包或其子包下,测试会失败:
这里bookservice报错其实不是错,也不会影响运行,也能改动,之前讲了,我好像忘了.....
9、基于SpringBoot实现SSM整合
9.1 整合框架
复习spring整合mybatis:
这样在pom.xml中就加载上了mybatis整合相关的依赖,还有mysql依赖。
完成配置文件:yml文件,自己创建
如果不想用内置数据源,想要使用druid数据源,那就把druid坐标加入pom文件,在配置数据源的时候指定使用druid数据源。
不能忘了加mapper这个注解昂,要不然不知道要自动加载,这就是之前的mapper映射。
自动加载了,但前面别忘了使用mapper注解。
9.2 案例
在之前完成的那么ssm案例使用springboot来完成,之前需要写好多配置类,现在不用了所以全删
1、起步依赖:
web项目要选web依赖,使用mybatis,选择mybatis和mysql依赖
2、原来需要的配置类,全不要咯:
3、domain不用变,dao改动一下,加上一个@mapper,作用是使springboot能够扫描到这个组件,实现自动代理。
4、service和controller都不用变
5、resources:原来的jdbc.properties不需要了,新建一个springboot的配置文件yml文件,在这个文件中设置数据源和端口
6、测试类:
原本的
现在:
7、结合web静态页面
原本这些文件都是在web-app目录下,但在springboot中应该放在static目录下
8、开服务器,运行
有个简便操作,写个html文件,如下配置,不用再打想要访问的文件的路径了,直接是默认的。