文章目录
第一章、spring框架的概述1.Spring框架是什么2.Spring的优点3.Spring的体系结构
第二章、IoC控制反转1.IoC的概述2.Spring的第一个程序1.实现步骤1.创建maven项目2.在pom.xml中加入spring的依赖3.创建接口和他的实现类4.创建Spring需要使用的配置文件5.测试Spring,通过spring创建对象
2.获取容器中对象的数量和id值3.applicationContext.xml中定义bean的scope属性4.Spring能创建一个非自定义的类的对象
3.基于XML的DI1.构造分类1.set注入(设置注入)(掌握)1.简单类型的set注入(设置注入)2.引用类型的set注入(设置注入)
2.构造注入(理解)
2.例子:实际项目中使用的好处3.引用类型属性自动注入1.byName方式自动注入2.byType方式自动注入
4.多个配置文件的优势
4.基于注解的DI(掌握)1.定义Bean的注解@Component1.Spring中和@Component功能一致,创建对象的注解还有:2.指定多个包的方式
2.简单类型属性注入@Value3.引用类型赋值1.byType自动注入@Autowired2.byName自动注入@Autowired与@Qualifier3.引用类型Autowired的required属性4.JDK注解@Resource自动注入
4.使用属性配置文件赋值5.注解与XML的对比
5.Junit介绍
第三章、AOP面向切面编程1.AOP概述2.AOP编程术语3.AspectJ对AOP的实现1.AOP和AspectJ的介绍2.Aspectj基于注解的AOP实现1.实现步骤(掌握)1.新建maven项目2.加入依赖3.定义目标类的接口和实现类4.定义切面类,创建方法,就是增强的方法,一个切面类中可以有多个方法5.创建applicationContext.xml配置文件6.结果,切面类的方法执行在了目标类之前,给目标类增强了方法
2.切面方法参数JoinPoint3.@AfterReturning后置通知-注解有returning属性(掌握)4.@Around环绕通知-增强方法ProceedingJoinPoint 参数(掌握)5.@AfterThrowing 异常通知-注解中有 throwing 属性(了解)6.@After 最终通知7.@Pointcut 定义切入点8.目标类没有接口,使用CGLIB动态代9.目标类有接口,可是手动指定使用CGLIB动态代理
第四章、Spring集成MyBatis1.创建Maven项目2.加入Maven依赖3.创建实体类4.创建dao接口和mapper文件5.创建mybatis.xml主配置文件1.用属性配置文件来进行数据源中信息的配置
6.创建service接口和实现类7.修改Spring配置文件8.获取service对象,通过service调用dao
第五章、Spring事务1.Spring事务管理2.spring事务管理API1.事务管理器接口2.事务定义接口1.PROPAGATION_REQUIRED2. PROPAGATION_REQUIRES_NEW3.PROPAGATION_SUPPORTS
3.程序举例环境搭建1.创建数据表2.在maven中加入依赖3.创建实体类4.创建dao5.创建service6.为了模拟运行时异常,我们自己创建一个异常7.创建Spring配置文件8.创建测试正常购买,通过service调用dao9.创建测试异常购买
4.使用spring的AOP事务注解管理事务(掌握)1.使用@Transaction的步骤
5.使用AspectJ的AOP配置管理事务(掌握)
第六章、Spring与Web1.创建maven web项目2.加入maven依赖3.创建数据表4.创建Student实体类5.创建dao6.创建service7.创建controller8.创建页面9.开启服务器执行代码10.创建监听器
第一章、spring框架的概述
1.Spring框架是什么
2.Spring的优点
3.Spring的体系结构
第二章、IoC控制反转
1.IoC的概述
2.Spring的第一个程序
1.实现步骤
1.创建maven项目
2.在pom.xml中加入spring的依赖
3.创建接口和他的实现类
4.创建Spring需要使用的配置文件
在resources包下面创建 Beans.xml(实际项目开发中应该叫applicationContext.xml)
5.测试Spring,通过spring创建对象
不用Spring框架之前我们需要自己手动创建对象 通过spring创建对象 Spring创建对象默认调用的是无参构造 底层是个map集合,get从map中拿数据 Map<String,Object> String就是id Object就是对象
2.获取容器中对象的数量和id值
3.applicationContext.xml中定义bean的scope属性
4.Spring能创建一个非自定义的类的对象
如:创建java自带的Date类的对象 先加入bean
3.基于XML的DI
1.构造分类
1.set注入(设置注入)(掌握)
1.简单类型的set注入(设置注入)
1.创建一个Student类 2.在applicationContext.xml中声明对象并对属性赋值 3.创建对象调用无参构造方法,调用对象中的setXXX()方法,对象类中只要有set方法就会调用 4.Spring也能给非自定义类赋值,比如,日期类
2.引用类型的set注入(设置注入)
1.创建一个School类 2.在之前Student类中声明一个School类型 3.在applicationContext.xml中声明一个School对象,然后把School赋值Student中,这就是赋值一个对象 4.创建Student对象,即可 原始我们手动创建对象和赋值,现在是Spring帮我们创建和赋值
2.构造注入(理解)
1.创建Student类,里面写一个带参构造 2.在applicationContext.xml中 Index属性和写名字一样,推荐使用名字赋值 3.Spring通过带参构造创建对象并赋值
2.例子:实际项目中使用的好处
如果有很多的对象,传统的方法service层和dao层都是通过new对象来实现,这样两者之间的耦合性很高,如果我们要改一个对象,那么要改动的地方就很多,如果使用Spring,只需要在配置文件中改动即可
1.创建一个Student类 2.dao层添加接口并实现 3.service层要调用dao层,为了减少代码的改动,我们用set注入 4.applicationContext.xml中,声明对象,service对象需要调用哪个dao层的实现类,就使用哪个 5.使用对象
3.引用类型属性自动注入
1.byName方式自动注入
1.创建Student和School对象 2.applicationContext.xml中,不用给引用类型赋值了 3.执行结果
2.byType方式自动注入
1.创建School、Studet 和School的子类PrimarySchool 2.applicationContext.xml中 3.执行代码
4.多个配置文件的优势
原本我们都是把bean写在一个xml文件下面,现在使用的是包含关系的配置文件 spring-student.xml中声明Student对象 Spring-school.xml中声明School对象 主配置文件中,指定其他文件的位置
4.基于注解的DI(掌握)
1.定义Bean的注解@Component
1.添加Spring依赖 2.创建Student类,在类上面添加注解 3.在applicationContext.xml中声明组件扫描器
1.Spring中和@Component功能一致,创建对象的注解还有:
2.指定多个包的方式
2.简单类型属性注入@Value
3.引用类型赋值
1.byType自动注入@Autowired
1.创建引用类型的对象 2.在引用类型属性上加注解 3.在applicationContext.xml中 4.结果
2.byName自动注入@Autowired与@Qualifier
3.引用类型Autowired的required属性
推荐使用true,因为这样报错我们就能及时解决
4.JDK注解@Resource自动注入
4.使用属性配置文件赋值
1.创建属性配置文件 2.在application.xml中加载属性配置文件
3.在类中赋值 3.结果
5.注解与XML的对比
5.Junit介绍
用main方法测试一次只能测试一个,还有很多的约束,使用Junit就不会,每个方法都是单独执行的
第三章、AOP面向切面编程
1.AOP概述
2.AOP编程术语
3.AspectJ对AOP的实现
1.AOP和AspectJ的介绍
2.Aspectj基于注解的AOP实现
1.实现步骤(掌握)
1.新建maven项目
2.加入依赖
3.定义目标类的接口和实现类
4.定义切面类,创建方法,就是增强的方法,一个切面类中可以有多个方法
这里用的是前置通知@Before
5.创建applicationContext.xml配置文件
自动代理生成器会去扫描声明的对象,如果是@Aspect注解的就是切面类,就会去判断切面方法执行在哪个目标类,切面方法中的execution中目标类的位置和参数类型和个数一定要正确,不然找不到
6.结果,切面类的方法执行在了目标类之前,给目标类增强了方法
2.切面方法参数JoinPoint
在切面方法中加入JoinPoint,就能获取目标业务的信息
3.@AfterReturning后置通知-注解有returning属性(掌握)
1.创建目标接口和实现类 2.创建切面方法 3.在applicationContext.xml中声明对象和代理生成器 4.测试
4.@Around环绕通知-增强方法ProceedingJoinPoint 参数(掌握)
1.创建目标类的接口和实现类 2.创建切面方法 3.在applicationContext.xml中声明对象和代理生成器 4.测试
5.@AfterThrowing 异常通知-注解中有 throwing 属性(了解)
1.在目标方法中有一个异常,被除数为0 2.切面方法 3.测试
6.@After 最终通知
1.创建目标对象实体类,带异常 2.创建切面方法 3.在xml中声明对象 4.测试,抛出异常也会执行
7.@Pointcut 定义切入点
使同一个切入点能复用
8.目标类没有接口,使用CGLIB动态代
1.目标类没有接口 2.切面方法中是前置通知和最终通知 3.测试
9.目标类有接口,可是手动指定使用CGLIB动态代理
在applicationContext.xml中 测试
第四章、Spring集成MyBatis
1.创建Maven项目
2.加入Maven依赖
1.
<dependencies>
<dependency>
<groupId>junit
</groupId>
<artifactId>junit
</artifactId>
<version>4.11
</version>
<scope>test
</scope>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactId>spring-context
</artifactId>
<version>5.2.5.RELEASE
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactId>spring-tx
</artifactId>
<version>5.2.5.RELEASE
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactId>spring-jdbc
</artifactId>
<version>5.2.5.RELEASE
</version>
</dependency>
<dependency>
<groupId>org.mybatis
</groupId>
<artifactId>mybatis
</artifactId>
<version>3.5.1
</version>
</dependency>
<dependency>
<groupId>org.mybatis
</groupId>
<artifactId>mybatis-spring
</artifactId>
<version>1.3.1
</version>
</dependency>
<dependency>
<groupId>mysql
</groupId>
<artifactId>mysql-connector-java
</artifactId>
<version>5.1.9
</version>
</dependency>
<dependency>
<groupId>com.alibaba
</groupId>
<artifactId>druid
</artifactId>
<version>1.1.12
</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java
</directory>
<includes>
<include>**/*.properties
</include>
<include>**/*.xml
</include>
</includes>
<filtering>false
</filtering>
</resource>
</resources>
</build>
3.创建实体类
4.创建dao接口和mapper文件
5.创建mybatis.xml主配置文件
数据库连接去applicationContext.xml中做
1.用属性配置文件来进行数据源中信息的配置
创建属性配置文件 jdbc.properties ApplicationContext.xml中 解决<context:property-placeholder location=“classpath:jdbc.properties” />报错问题
在applicationContext.xml中加上context的相关解析文件即可
6.创建service接口和实现类
set注入的是dao接口的实现类
7.修改Spring配置文件
这是applicationContext.xml相当于一个模板写完一次只需要改包名即可 Bean的对象都存在Spring的容器之中 在applicationContext.xml中配置,数据源的配置,连接数据库的信息 SqlSessionFactoryBean的配置,创建SqlSessionFactory 定义Mapper扫描配置器MapperScannerConfigurer,创建dao对象使用getMapper(XXX.class)
8.获取service对象,通过service调用dao
声明service对象,service层接收controller层传来的请求,经过一系列判断,来把加工后的值给dao层,进行数据库的调用
把创建的dao的实现类赋值给service 测试,spring和mybatis整合在一起使用,事务是自动提交的。无需执行SqlSession.commit()
第五章、Spring事务
1.Spring事务管理
2.spring事务管理API
1.事务管理器接口
2.事务定义接口
1.PROPAGATION_REQUIRED
2. PROPAGATION_REQUIRES_NEW
3.PROPAGATION_SUPPORTS
3.程序举例环境搭建
举例:购买商品 trans_sale 项目,本例要实现购买商品,模拟用户下订单,向订单表添加销售记录,从商品表减少库存。涉及到两个表,所以需要事务来实现
实现步骤:
1.创建数据表
创建两个数据库表 sale , goods Sale表(销售记录表) Goods表(商品库存表) goods数据
2.在maven中加入依赖
3.创建实体类
Goods实体类 Sale实体类
4.创建dao
SaleDao接口 saleDao.xml Goods接口 Goods.xml
5.创建service
service接口 实现类
6.为了模拟运行时异常,我们自己创建一个异常
7.创建Spring配置文件
Mybatis.xml Jdbc.properties applicationContext.xml
8.创建测试正常购买,通过service调用dao
数据库中库存表 1001商品的数量减少了10 销售表中增加了销售记录
9.创建测试异常购买
当没有添加事务的时候,两表不会因为异常而同时撤销执行,但我们应该让他们是属于一致的状态,所以需要spring去添加事务,来让数据库操作属于同一状态
1.测试异常为:查询商品不存在 数据表中销售表添加了一条数据 库存表没变,因为没有执行到
2.测试异常为:商品库存不足 数据表中销售表添加了一条数据 库存表没变,因为没有执行到
4.使用spring的AOP事务注解管理事务(掌握)
1.使用@Transaction的步骤
用5.3的程序环境搭建的例子做事务管理
1.在applicationContext.xml中添加 2.在service的方法上加@Transaction 下面在@Transaction里写的东西都是默认的,可以只写@Transaction就行 这种方式是开发中的常用方式 3.创建测试解决5.3中的,执行异常时,数据库操作中两表不会因为异常而同时撤销执行的问题 购买商品为1005,报出商品不存在的异常,但是此时只是执行了buy方法的开始,方法的结束语句没有输出 销售记录表中的数据也没有增加,说明事务执行成功,原本不加事务的话添加销售记录的方法是会执行的,此时两个方法都没有执行,操作回滚了 商品库存不足的异常也是同理,没有执行方法
当正常购买时,两个sql语句都执行 销售记录表增加一条数据 库存表中笔记本电脑数量-10
5.使用AspectJ的AOP配置管理事务(掌握)
用5.3的程序环境搭建的例子做事务管理
1.添加maven依赖 2.在applicationContext.xml中添加,都是模板方式,写一次后只需要改一些即可 3.创建测试解决5.3中的,执行异常时,数据库操作中两表不会因为异常而同时撤销执行的问题 购买商品为1005,报出商品不存在的异常,但是此时只是执行了buy方法的开始,方法的结束语句没有输出 销售记录表中的数据也没有增加,说明事务执行成功,原本不加事务的话添加销售记录的方法是会执行的,此时两个方法都没有执行,操作回滚了
当正常购买时 销售记录表数据加了一条 商品仓库中笔记本电脑-10
第六章、Spring与Web
1.创建maven web项目
2.加入maven依赖
3.创建数据表
4.创建Student实体类
5.创建dao
创建StudentDao接口 创建StudentDao.xml
6.创建service
创建StudentService接口 创建StudentServiceImpl实现类
7.创建controller
1.修改web.xml版本为4.0
用maven模板生成的web,里面的web,xml版本只有2.3,有很多功能用不了,所以我们需要把它改为4.0 打开项目结构,点击减号删除当前的文件 删除后,点击加号选择4.0版本,把web.xml文件名改为1.web.xml 然后在项目中把1web.xml改为web.xml即可 Web.xml就是4.0的了
2.创建RegisterServlet类
8.创建页面
Index.html Result.html
9.开启服务器执行代码
问题: 每一次注册请求,spring都会创建一次容器对象,都会创建配置文件中的所有对象,但是web项目中容器对象只需要创建一次,如果我们在一次发请求100次,对象就会创建100次,如果配置文件中对象很多,这样会大大占用内存,我们用监听器来解决
10.创建监听器
1.加入监听器依赖 2.在web.xml中注册监听器,并修改默认文件位置 监听器读取applicationContext.xml去创建applicationContext对象
配置监听器目的: 是创建容器对象,创建了容器对象,就能把applicationContext.xml配置文件中的所有对象都创建好,用户发起请求就可以直接使用对象了
3.此时Controller中 获取容器对象 执行了3次注册请求,对象还是同一个