Spring框架笔记,全网最详细!!!(12)

tech2022-07-07  236

文章目录

第一章、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> <!--spring核心ioc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency> <!--做spring事务用到的--> <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> <!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--mybatis和spring集成的依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!--mysql驱动--> <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> <!--目的是把src/main/java目录中的xml文件包含到输出结果中。输出到classes目录中--> <resources> <resource> <directory>src/main/java</directory><!--所在的目录--> <includes><!--包括目录下的.properties,.xml 文件都会扫描到--> <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次注册请求,对象还是同一个

最新回复(0)