Spring基础

1.Spring简介:
Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,为了解决企业应用开发的复杂性而诞生的
2.控制反转:获得依赖对象的过程被反转了,由自身的管理,变成IOC容器注入
控制反转是Spring的核心,就是由Spring来控制对象的生命周期及对象间的关系
1)传统的开发模式:对象之间相互依赖
例如找女朋友,自己得到处找,从性格,外貌,身材等各个方面去考虑,去寻找


image.png

各个模块之间相互关联牵一发而动全身
2)IOC开发模式:IOC容器安排对象之间的关系
例如找女朋友的时候有一个婚介所,你把自己的需求提出来剩下的交给婚介所去安排就好了


image.png

把控制权交给了IOC容器,IOC容器相当于凝合剂的作用
image.png

互相不相关
IOC另外的名字叫做依赖注入(DI),所谓的依赖注入,就是IOC容器在运行期间,动态的将某种依赖关系注入到对象中,所以依赖注入和控制反转是从不同的角度描述的同一件事情,就是通过引入IOC容器,利用依赖注入的方式,实现解耦。
image.png

对象相当于主机,各种USB设备相当于关系,主机不需要知道为什么要插入USB,只需要识别USB设备即可,“我”来控制插入何种USB设备,我就相当于IOC容器,我把USB注入到了主机。当电脑主机读取文件的时候,我就把它需要的外部设备挂接上,挂接设备的过程,和在系统运行过程中一个被依赖的对象注入到另一个对象的过程是一样的 。
对象A依赖对象B,当对象A需要用到对象B的时候,IOC容器就立刻创建一个对象B给对象A。IOC容器相当于一个对象制造工厂,你需要啥就给你啥,不需要关心所用的东西如何制成的和销毁的,这些都由IOC容器来包办

总结:
IOC通俗理解:说的是创建实例对象的控制权从代码控制剥离到IOC容器控制,实际上就是在你的xml文件中控制,侧重原理
DI:说的是创建对象示例,为这个对象注入属性值和它的对象实例,侧重实现。
3.面向切面(AOP)
AOP把常用的功能模块化,每一个业务组件只需要关心自己的业务逻辑,而不用去了解常用的服务组件。有效的防止代码混乱
AOP专门用于处理系统中分布于各个模块中交叉点关注的问题,在javaee中通常通过AOP来处理一些具有横切性质的系统级服务


image.png

image.png

切面:关注点的模块化,关注点可能会横切多个对象,
连接点:程序在运行过程中某个特定的点,例如方法调用的时候,处理异常的时候,通俗的说就是加入切点的那个点
通知:连接点执行的动作
AOP通俗理解:
一个组件A,不关心其它常用的服务组件B,但是A要使用组件B的时候,不是组件A自己去调用,而是通过配置等其他方式,比如Spring中的xml配置文件,这样A不需要知道组件B的任何事情,A只关心自己的业务逻辑,具体在A使用B的过程中,配置文件去做,与具体的A组件无关。

自动装配模式的区别

  • no:这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。
  • byName:该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
  • byType:该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
  • constructor:造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
  • autodetect:该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。

Spring 框架中都用到了哪些设计模式

  • 代理模式—在AOP和remoting中被用的比较多。
  • 单例模式—在spring配置文件中定义的bean默认为单例模式。
  • 模板方法—用来解决代码重复的问题 比如. RestTemplate, JmsTemplate, JpaTemplate。 前端控制器—Srping提供了DispatcherServlet来对请求进行分发。 视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。 依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
  • 工厂模式—BeanFactory用来创建对象的实例。
  • Builder模式- 自定义配置文件的解析bean是时采用builder模式,一步一步地构建一个beanDefinition
  • 策略模式:Spring 中策略模式使用有多个地方,如 Bean 定义对象的创建以及代理对象的创建等。这里主要看一下代理对象创建的策略模式的实现。 前面已经了解 Spring 的代理方式有两个 Jdk 动态代理和 CGLIB 代理。这两个代理方式的使用正是使用了策略模式。

Spring事务的隔离级别

  1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
    另外四个与JDBC的隔离级别相对应
  2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
  3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
  4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
  5. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。

Spring事务定义的传播规则

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

你可能感兴趣的:(Spring基础)