0
点赞
收藏
分享

微信扫一扫

Spring5框架精炼学习心得

fbd4ffd0717b 2022-03-30 阅读 59

 第一节:Spring简介

1.Spring是轻量级的开源的JavaEE框架
2.Spring可以解决企业应用开发的复杂性

3.Spring的两个核心:IOC和AOP
(1)IOC:控制反转,把创建对象过程交给Spring进行管理
(2)AOP:面向切面,不修改源代码进行功能增强

4.Spring特点
(1)方便解耦,简化开发
(2)AOP编程支持
(3)方便程序的测试
(4)方便集成各种优秀框架
(5)降低Java EE API使用难度
(6)方便进行事务操作

第二节:IOC(xml方式)

1.加载spring.xml,Applicationcontext c = new ClassPathApplicationContext("..xml")
获取配置创建的对象:context.getBean()

2.什么是IOC
控制反转,把对象创建和对象之间的调用过程交给Spring进行管理
使用IOC目的:降低耦合度
入门案例就是IOC实现

3.IOC底层原理
(1)xml解析、工厂模式、反射
单纯工厂模式解耦并不是最低限度,IOC可以达到。


加一层,工厂创建dao对象

 

IOC过程,进一步解耦:


IOC(接口)
1.IOC思想基于IOC容器完成 ,IOC容器底层就是对象工厂
2.Spring提供IOC容器实现两种方式:(两个接口)
(1)BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用
****加载配置文件不会创建对象,在获取使用对象时才创建
(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员使用
****加载配置文件时就创建对象


(3)ApplicationContext接口有实现类


(4)BeanFactory接口包括ApplicationContext子接口

4.IOC操作Bean管理
Bean管理指的是两个操作:(1)Spring创建对象;(2)Spring注入属性
Bean管理操作两种方式:(1)基于xml配置文件方式实现;(2)基于注解方式实现
4.1.1 基于xml方式创建对象

*id属性:唯一标识;*class属性:类全路径; 创建对象是默认通过无参构造方法
4.1.2 基于xml方式注入属性(怎么在spring.xml中为对象注入属性)
(1)DI:依赖注入,就是注入属性----在IOC创建对象的基础上的具体操作
第一种就是set方法注入;

*property标签用来注入对象属性;*value标签是属性值
关于测试属性能否输出,对于private属性,类中要配有相应的set和get方法使对象能够查看。

第二种就是有参构造器注入

 

有参构造器需要通过constructor-arg标签注入属性值,与无参构造property标签不同。

4.1.3 xml注入其他属性类型
1.字面量
(1)null值---用null标签

 

(2)特殊符号----用转义符或者把特殊符号内容写到CDATA
转义符号:< >
CDATA使用:<property name="bnum"> <value><![CDATA[<<南京>>]]></value>

(3) 注入属性(xml方式):外部bean(对象类型属性)
(1)创建两个类service类和dao类(这个dao是接口实现类)
(2)在service调用dao里面的方法(在sevice中设置类型为dao的属性,最后配置在xml中)
(3)在spring配置文件中进行配置(用ref标签指明注入的对象)

 

(4) 注入属性-内部bean和级联赋值(对象类型属性)
(1)一对多关系:部门和员工
(2)在实体类之间表示一对多关系,员工类的部门属性用部门类的对象类型属性进行表示
//员工属于一个部门
private Dept dept;
(3)在spring配置文件中进行配置(在员工bean中嵌套所用的部门bean)


(5)注入集合类型属性(与之前的基本数据类型,集合类型可以注入多个值)
1.注入数组类型属性(<array><value>..</value></array>
2.注入List集合类型属性(<list><value>..</value></list>
3.注入Map集合类型属性(<map><entry key=, value=>..</entry></map>

 

 

(5.1)注入集合类型属性的细节问题
1.在集合里面设置对象类型值


(5.2)使用util标签完成list集合注入提取

 
4.2 IOC操作Bean管理(FactoryBean)
1.Spring有两种类型的bean,一种是普通bean,另外一种是工厂bean

2.普通bean:在xml中定义bean类型就是返回类型;
3.工厂bean:在xml中定义bean类型可以和返回类型不一样
第一步 创建类,让这个类作为工厂bean,实现接口FactoryBean
第二步 实现接口里面的方法,在实现的方法中定义返回的bean类型

测试时对象类型直接就是返回类型(意思就是不直接拿到对象,而是通过工厂拿到)


4.3 Bean的作用域(单、多实例)
(1)在Spring中默认的bean对象是单实例的;
(2)在Springxml的bean标签中有属性(scope)用于设置单实例或多实例

 

4.4 Bean生命周期(带后置处理器实现接口BeanPostProcesser)
(1)通过构造器创建bean实例(无参构造)
(2)为bean属性注入值和对其他bean引用(调用set方法)
(3)把bean实例传递bean后置处理器postProcessBeforeInitialization
(4)调用bean的初始化方法(需要进行配置初始化的方法:bean标签中的属性init)
(5)把bean实例传递bean后置处理器postProcessAfterInitialization
(6)bean可以使用了(对象获取到了)
(7)当容器关闭时,调用bean的销毁的方法(需要进行配置销毁方法)

4.5 Bean管理(xml自动装配)(为对象属性装配对应的bean)(在bean标签内选择autowire)
(1)自动装配:根据指定装配规则(属性名称或者类型),Spring自动将匹配的属性值注入
byName:根据名称注入,被注入bean的id必须和属性名相同。
byType:根据类型注入,不能定义多个同类型的bean,不然无法选择。

4.6 Bean管理(外部属性文件)
1.使用外部属文件配置数据库连接池
(1)添加context名称空间:
(2)用context标签指示外部属性文件位置:
(3)创建连接池对象bean:
属性由表达式给出,给出名称

第三节:bean管理(基于注解方式) 

 1.什么是注解
(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值...)
(2)使用注解,注解作用在类上面,方法上面,属性上面
(3)使用注解目的:简化xml配置

2.Spring针对Bean管理中创建对象提供注解
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
*上面四个注解功能是一样的,都可以用来创建bean实例

3.基于注解方式实现创建对象
第一步 引入aop依赖

第二步:开启组件扫描
(1)先创建名称空间context 
(2)利用context标签进行组件扫描(可以扫描多个包,用“,”隔开)(多个包也可以直接扫描上层目录)

第三步 创建类,在类上面添加创建对象的注解

测试方法与基于xml方式的相同

组件扫描(默认扫描所有)中的两个常见配置:1.只扫描哪些内容 2.排除那些内容

4.基于注解方式实现属性注入(前三个都是注入对象类型属性)
(1)@AutoWired:根据属性类型进行自动装配
第一步:把service和dao的类上添加注解创建对象;
第二步:在sevice类中注入dao对象,在service类添加dao属性,在属性上面添加注解;(当注入类有多个对象时不适用)

(2)@Qualifier:根据属性名称进行自动装配
这个@Qualifier注解的使用,和@AutoWired一起使用;

被注入的类对象应在相应出给出名称,这两个一起使用准确找到注入bean 

 (3)@Resource:可以根据类型注入,可以根据名称注入
第一种:类型注入---直接@Resource
第二种:名称注入---@Resource(name = "")

 (4)@Value:注入普通类型属性

 

 5.完全注解开发(无xml文件)
(1)创建配置类:需要添加@Configuration和@ComponentScan两个注解

(2)加载配置类:使用AnnotationConfigApplicationContext类 

 第四节:AOP

1.什么是AOP?
(1)AOP面向切面编程:利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可用性,同时提高了开发的效率。
(2)通俗描述:不通过修改源代码的方式,在主干功能里面添加新功能。

2.AOP底层原理
(1)AOP底层使用动态代理(有两种情况动态代理)
第一种:有接口情况,使用JDK动态代理
●创建接口实现类代理对象,增强类的方法

第二种:没有接口情况,使用CGLIB动态代理 
●创建当前类的子类代理对象,增强类的方法


3.AOP(JDK动态代理实现)
(1)使用JDK动态代理,使用Proxy类里面的方法创建代理对象
第一步:调用newProxyInstance方法
方法有三个参数:
参数1:类加载器Proxy.class.getClassLoader()
参数2:增强方法所在的类,这个类实现的接口,支持多个接口(接口列表:Class[] interfaces = {UserDao.class})
参数3:实现这个接口InvocationHandler,创建代理对象,写增强方法

4.AOP(术语)
**1.连接点
类里面哪些方法可以被增强,这些方法成为连接点;
**2.切入点
实际被增强的方法,称为切入点;
**3.通知(增强)
(1)实际增强的逻辑部分称为通知(增强)
(2)通知有多种类型
--前置通知@Before
--后置通知@After
--环绕通知@Around
--异常通知@AfterThrowing
--最终通知 finally
**4.切面
是动作,把通知应用到切入点的过程

5.AOP操作(准备)
(1)Spring框架一般都是基于AspectJ实现AOP操作:AspectJ不是Spring的组成部分,是独立的AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP操作。

6.基于AspectJ实现AOP操作
(1)基于xml配置文件实现
(2)基于注解方式实现(使用)

 

7.在项目引入AOP相关依赖

8.切入点表达式
(1)切入点表达式作用:知道对哪个类里的哪个方法进行增强
(2)语法结构:
execution([权限修饰符] [返回类型] [类全路径].[方法名称]([参数列表]))
com.pack.User.add()----com.pack.User.*-----com.pack.*      (某个方法---某个类所有方法---包下所有方法)

9.AOP操作(AspectJ注解方式)
--1--:创建类User,在类里面定义方法
--2--:创建增强类UserProxy(编写增强逻辑):在增强类里创建方法,让不同的方法代表不同的通知类型
--3--:进行通知的配置:
●在spring配置文件中,开启注解扫描
●使用注解创建User和UserProxy对象
●在增强类上面添加注解:@Aspect

 

●在spring配置文件中开启生成代理对象


--4--:配置不同类型的通知:在增强类中,作为通知方法上面添加通知类型注解,使用切入点表达式配置

最终测试执行被增强类的方法,会调用通知。

10.AspectJ注解细节问题
(1)相同切入点抽取:利用@PiontCut注解


(2)多个增强类对同一个方法进行增强,设置增强类的优先级
在增强类的上面添加注解:@Order(数字类型值),数字越小优先级越高

 

 

 第五节:JDBCTemplate

1.什么是JdbcTemplate?
(1)Spring框架对JDBC进行封装,使用JdbcTemplate方便对数据库操作

2.准备工作
(1)引入相关jar包

(2)在spring配置文件中配置数据库连接池 (3)配置JdbcTemplate对象,注入dataSource

(4)创建service类,创建dao类,在dao注入jdbcTemplate对象 

 在service和dao类中添加注解

 

 具体操作:编写serviece和dao
(1)在dao里进行数据库添加操作
(2)dao中调用jdbcTemplate对象里面的update方法对数据库进行gengxin

 ●第一个参数:sql语句
●第二个参数:可变参数,设置sql语句值

 JdbcTemplate操作数据库(修改和删除)

 

JdbcTemplate操作数据库(查询返回某个值)
1.查询表里有多少条记录,返回的是某个值
2.使用JdbcTemplate查询表中记录数 

JdbcTemplate操作数据库(查询返回对象)
1.场景:查询图书详情
2.JdbcTemplate实现查询返回对象 ●第一个参数:sql语句
●第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类BeanPropertyRowMapper完成数据封装
●第三个参数:

JdbcTemplate操作数据库(查询返回集合)
1.场景:查询图书列表分页...
2.调用JdbaTemplate实现查询返回集合(类型设置为集合类型)

●第一个参数:sql语句
●第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类BeanPropertyRowMapper完成数据封装
●第三个参数: 

JdbcTemplate操作数据库(批量操作:操作表里的多条记录)
1.使用JdbcTemplate实现批量增加的操作(batchUpdate方法);
参数1:sql语句;   参数2:List集合,添加多条记录的数据;

 

2.使用JdbcTemplate实现批量修改的操作(batchUpdate方法);
参数相同,注意顺序!!!

 

 2.使用JdbcTemplate实现批量删除的操作(batchUpdate方法);

 

第六节:事务操作 

1.什么是事务
(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败,所有操作都失败。
(2)经典场景:银行转账

2.事务四个特性(ACID)
(1)原子性:事务是基本单元
(2)一致性:操作前后总量不变
(3)隔离性:多事务不会相互影响
(4)持久性:事务完成,数据发生变化

3.事务操作(搭建事务操作环境)
(1)创建数据库表,添加记录

 (2)创建service,搭建dao,完成对象的创建和注入,配置连接池。
service注入dao,dao注入JdbcTemplate,JdbcTemplate注入Datasource
(3)在dao中创建两个方法,一个多钱,一个少钱,service创建方法(转账方法)

 

***用事务解决操作数据库异常情况
事务操作过程:开启事务--开启业务操作--无异常,提交事务---出现异常,事务回滚 

4.Spring声明式事务管理:一般把事务添加到JavaEE三层结构的Service层(业务逻辑层)
(1)基于注解方式; (2)基于xml配置文件方式
*****Spring进行声明式事务管理,底层使用AOP
*****Spring事务管理API:提供一个接口,这个接口针对不同的框架提供不同的实现类 

注解方式具体操作:
(1)在配置文件配置事务管理器

(2)在配置文件中,开启事务注解
第一步:引入名称空间tx

(3)在service类上面(或者service类里面方法上面)添加事务注解(@Transactional)
如果添加到类上,该类所有方法添加事务;如果具体到某个方法,该方法添加事务 

@Transactional注解参数介绍
(1)propagation:事务传播行为-----多事务方法直接进行调用,这个过程中事务是如何进行管理的

(2)isolation:事务隔离级别(serilizable最高)
不考虑隔离性会产生三个读问题:脏读、不可重复读、虚(幻)读
脏读:一个未提交的事务读取到另一个未提交的事务的数据
不可重复读:一个未提交的事务读取到另一个已提交的事务修改数据
虚读:一个未提交的事务读取到另一个提交事务添加数据

(3)timeout(默认-1):超出时间
事务要在一定的时间内进行提交,否则会进行回滚。

(4)readOnly(默认false):是否只读
(5)rollbackFor:回滚
设置出现哪些异常进行事务回滚
(6)noRollbackFor:不会滚
设置出现哪些异常不进行事务回滚

声明式事务管理完全注解开发
通过@Bean注解来创建原先在xml中的bean

 

 

 

 

举报

相关推荐

Spring5框架

MYSQL学习心得5

Spring5框架一、概述

Spring5学习笔记

css学习心得

AlphaFold学习心得

0 条评论