学习笔记之Spring知识点小总结

**

记录一些个人经常忘的Spring知识

**
1、首先几个重要的概念:

Spring:就是一个容器,里面放着各种各样的资源
DI(dependency injection):依赖注入,IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入.   
AOP(Aspect-Oriented Programming):面向切面编程
IOC(Inversion of Control):简单翻译就是控制反转,将传统的资源获取方式改变,传统模式都是我需要什么资源,再去查找,而现在是将所有的资源放在一个容器中,当我们需要用到时候,则去获取,去容器里面挑选

2、Bean的作用域

①Spring 中, 可以在 元素的 scope 属性里设置 Bean 的作用域.
②默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用域被称为 singleton, 它是所有 Bean 的默认作用域.
这里写图片描述

3、引入外部资源文件–比如引入数据库配置文件

<context:property-placeholder location="classpath:db.properties"/>

4、AOP

面向切面编程,简单来说一刀切,将需要添加其他代码的方法一刀切出来,然后通过在切面上添加共同的代码,类似于抽取代码一般
Spring使用两种代理来实现,一种是基于JDK的动态代理,一种是cglib的动态代理,两者的区别就在于JDK的动态代理是基于接口的,没有接口会报类型转换异常错误,cglib则不需要接口,原理是用asm(就是一个字节码框架,具体是什么,怎么用,我也没了解过。。。)来实现的,基于字节码来实现

①切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象
②通知(Advice): 切面必须要完成的工作
③目标(Target): 被通知的对象
④代理(Proxy): 向目标对象应用通知之后创建的对象
⑤连接点(Joinpoint):程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连⑥接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如 ArithmethicCalculator#add() ⑦方法执行前的连接点,执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置
⑧切点(pointcut):类似于查询条件一般,可以根据这个切点(条件)来指定类,对符合该条件的类来进行操作,表达式(* . (..)) 下面是切点的演示案例,基于合并切点表达式
这里写图片描述

AspectJ 支持 5 种类型的通知注解:
@Before: 前置通知, 在方法执行之前执行
这里写图片描述
@After: 后置通知, 在方法执行之后执行
这里写图片描述
@AfterReturning: 返回通知, 在方法返回结果之后执行
这里写图片描述
如果想操作返回的值,可以用下面的操作
这里写图片描述
@AfterThrowing: 异常通知, 在方法抛出异常之后
可以指定具体的异常类型,也可以使用超类Throwable,看个人情况
这里写图片描述
@Around: 环绕通知, 围绕着方法执行
这里写图片描述

指定切面的优先级,可以使用注解@Order(n) n越小优先级越高

5、Spring中的事务
ACID
原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.
一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.
隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏.
持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中

声明式事务管理(简单来说,就是你通过注解的方式或者XML方式声明他需要事务,然后指定其他属性,比如隔离级别,超时时间。。。,然后Spring就可以给你加上事务了,表示这段代码是有事务管理的)

注解方式:
在所需要加事务的方法或者类上面加上注解@Transactional
有以下其中,反正就用第一种就可以了(默认就是第一种),后面的几种 根据业务需求再慢慢选择
这里写图片描述

并发事务导致的问题–脏读 不可重复读 幻读

脏读: 存在两个事务AB,两个事务AB均开启,A事务修改数据后,B事务在读取,能读取到A事务修改的数据,且此时事务AB均未提交,这就是脏读。简单来说,就是未提交事务之间可以读取到彼此之间事务修改的数据
不可重复读:同上,有两个事务AB,A事务开启,修改其中一条数据,B事务开启修改一条数据且提交事务,此时A事务再次读取的时候,就能读取到B事务修改的数据,这就是不可重复读
幻读:同上,有两个事务AB,A事务开启,修改其中一条数据,B事务开启增加或者删除一条数据且提交事务,此时A事务再次读取的时候,就能读取到B事务增加或删除的数据,这就是幻读
幻读和不可重复读容易混淆,其最关键的地方,就在于不可重复读侧重于修改数据,而幻读侧重于增加或者删除数据

事务的隔离级别

事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.
Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE
Mysql 支持 4 中事务隔离级别.

设置隔离级别的属性
1、注解方式
这里写图片描述
2、xml方式
这里写图片描述

设置回滚事务属性
默认情况下只有未检查异常(RuntimeException和Error类型的异常)会导致事务回滚. 而受检查异常不会.

事务的回滚规则可以通过 @Transactional 注解的 rollbackFor 和 noRollbackFor 属性来定义. 这两个属性被声明为 Class[] 类型的, 因此可以为这两个属性指定多个异常类.
rollbackFor: 遇到时必须进行回滚
noRollbackFor: 一组异常类,遇到时必须不回滚
这里写图片描述

多种异常还可以使用逗号隔开
这里写图片描述

超时事务属性: 事务在强制回滚之前可以保持多久. 这样可以防止长期运行的事务占用资源.
只读事务属性: 表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务.
还有一种就是声明式的事务管理,说白了就是跟AOP一样,需要指定哪个方法加上事务,所以就需要在xml文件中配置上对应的表达式,就相当于查询条件一般,把他给筛选出来,然后给它加上对应的事务

这里写图片描述

以上,是本人所总结的一些自己经常忘记的知识点,也有可能存在错误,欢迎指出,后续讨论过后会纠正。谢谢!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一课:面向抽象编程 4 第二课:Jdom的基本使用 4 第三课:模拟Spring功能 5 第四课:搭建sping的运行环境 8 一、 建立一个新的项目 8 二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting dependencies) 9 (一) setter注入类型Setter Injection 9 (二) 构造方法Constructor Injection 10 四、 id、name 11 五、 简单属性的注入 11 六、 Bean的作用范围scope 12 七、 集合注入 12 八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier 17 三、 @Resource(重要、推荐) 17 (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope、@PostConstruct、@PreDestroy 19 六、 注解对应的jar包 19 第七课:AOP(面向切面编程) 19 一、 AOP概念 19 二、 利用动态代理实现面向切面编程 20 第八课:Spring AOP配置选项 21 一、 AOP配置annotation方式 21 (一) 搭建annotation开发环境 21 (二) aspectJ类库 22 (三) AOP的annotation实例 22 (四) AspectJ的专业术语 23 (五) 织入语法 23 (六) Advice 24 (七) Pointcut 26 (八) annotatin方式的AOP实例 26 二、 AOP配置xml方式 27 三、 AOP实现动态代理注意 28 第九课:DataSource 28 一、 Sping配置数据源: 28 二、 注入使用 29 三、 dbcp.BasicDataSource 29 第十课 Spring整合Hiberante3 30 一、 Spring配置hibernate3的SessionFactory 30 (一) xml形式的SessionFactory 30 (二) annotation注解方式的SessionFactory 30 二、 引入hibernate所需要使用的jar 31 (一) 基本jar 31 (二) 加入annotation功能的jar包 31 (三) 搭建日志环境并配置显示DDL语句jar包 31 三、 Spring整合hibernate3事务 31 (一) Annotation注解方式配置事务管理 31 (二) Spring事务选项 35 (三) XML文件形式配置Spring事务管理 37 四、 HibernateTemplate 38 (一) HibernateTemplate 38 (二) HibernateDaoSupport 39 第十一课:Spring整合-SSH 40 一、 第一步:加入jar包(需要的jar包列表) 40 二、 第二步: 首先整合Spring + Hibernate 41 三、 第三步:再来整合Struts2 41 四、 struts的读常量: 43 第十二课:DTO、VO 43 一、 DTO 43 二、 VO 43 第十二课:SSH整合存在的问题 43 一、 Jsp中访问Session时,Session已经关闭 43 二、 如果不配置事务,openSessionView出现异常 44 三、 中文乱码问题: 44 第十三课:SSH整合的jar包 45 一、 Struts2 45 二、 Hibernate3.3.2 45 三、 Spring 46

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值