Spring框架精简总结

一、Spring是什么?

1.1轻量级:并不是说Spring的jar包有多大,而是说Spring是非侵入性的(即当使用Spring时,不需要去实现Spring给提供的任何接口,不需要去继承它的任何父类,可以享用它的功能)基于Spring开发的应用中的对象可以不依赖于Spring的API

1.2依赖注入(DI、IOC)

1.3面向切面编程(AOP)

1.4容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期

1.5框架:Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中可以使用XML和Java注解组合这些对象。

1.6一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架(如Struts2、Hibernate、Mybatis )和优秀的第三方类库(实际上Spring自身也提供了展现层的Spring MVC和持久层的Spring JDBC)

 

 二、Spring的IOC

1.IOC的定义

IOC是反转资源获取的方向,代替的传统的对象创建模式,转入主动推送资源,

DI依赖注入:IOC的另一种表述方法,即组件以一些预先定义好的方式(例如:setter方法)接受来自如容器的资源注入

 

 2.Bean的作用域

 

1.在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.

2.默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用域被称为 singleton, 它是所有 Bean 的默认作用域.

 

 3.管理Bean的生命周期

1.Spring IOC 容器对 Bean 的生命周期进行管理的过程

1).通过构造器或工厂方法创建 Bean 实例

2).为 Bean 的属性设置值和对其他 Bean 的引用

3).调用 Bean 的初始化方法

4).Bean 可以使用了

5).当容器关闭close时, 调用 Bean 的销毁方法

2.创建 Bean 后置处理器

1.Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.

2.Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.

3.对Bean 后置处理器而言, 需要实现BeanPostProcessor接口. 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:

 

3.添加 Bean 后置处理器后 Bean 的生命周期

1).通过构造器或工厂方法创建 Bean 实例

2).为 Bean 的属性设置值和对其他 Bean 的引用

3).将 Bean 实例传递给 Bean后置处理器的postProcessBeforeInitialization 方法

4).调用 Bean 的初始化方法

5).将 Bean 实例传递给 Bean 后置处理器的 postProcessAfterInitialization方法

6).Bean 可以使用了

7).当容器关闭时, 调用 Bean 的销毁方法

 

 二、Spring的AOP

AOP简介

AOP是基于JDK动态代理实现,主要编程对象是切面,切面模块化横切关注点,从而让业务逻辑模块更加简洁

 AOP术语

1). 切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的类

2). 通知(Advice): 切面必须要完成的工作(切面中的每一个方法被称为通知)

3). 目标(Target): 被通知的对象

4). 代理(Proxy): 向目标对象应用通知之后创建的对象

5). 连接点(Joinpoint):程序执行的某个特定位置(一个具体的物理存在):如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如 ArithmethicCalculator#add() 方法执行前的连接点,执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置

连接点(执行的方法名、执行的方法的形参信息等)

6). 切点(pointcut):每个类都拥有多个连接点:例如 ArithmethicCalculator 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。AOP 通过切点定位到特定的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。

@Pointcut(value = "execution(* com.igeek.ch02.annotation.ICount.*(..))")
* 1.声明的切入点表达式与通知,在同一个类中,直接调用声明切点的方法名
* 2.声明的切入点表达式与通知,不在同一个类中但在同包下,切入点所在的类名.直接调用声明切点的方法名
* 3.声明的切入点表达式与通知,不在同包下,切入点所在的包名.类名.直接调用声明切点的方法名

 

 三、Spring的事务管理

 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用

 事务的四个关键属性(ACID)

原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.

一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.

隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏.

持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中.

 

 并发事务所导致的问题

并发事务所导致的问题可以分为下面三种类型:

脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.

不可重复读:对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.

幻读:对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.

 事务的隔离级别

1).从理论上来说, 事务应该彼此完全隔离, 以避免并发事务所导致的问题. 然而, 那样会对性能产生极大的影响, 因为事务必须按顺序运行.

2).在实际开发中, 为了提升性能, 事务会以较低的隔离级别运行.

3).事务的隔离级别可以通过隔离事务属性指定

4).Spring 支持的事务隔离级别

 5).事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.

Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE

Mysql 支持以上 4种事务隔离级别.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值