spring 总结

来源:互联网 发布:java socket编程心跳 编辑:程序博客网 时间:2024/05/17 03:54

Spring 总结

定义:Spring是一个轻量级,开源的,非侵入式的控制反转(Ioc)和面向切面(Aop)的容器框架

       Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 

DI(依赖注入):和控制反转的一个概念,具体的来说,当一个角色需要另外一个角色的协助的时候,在传统的程序设计中,通常由调用者来创建被调用者的实例

               但是在spring中,被调用者将不再被调用者完成,这就是控制反转。创建被调用者由spring容器来完成,在容器实例化对象的时候主动的将被调用者(或者是依赖对象)

               注入给调用对象,这就叫做依赖注入

容器spring是个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等

框架spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等)使开发人员更专注于开发应用逻辑

Aop:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来

 

IOC容器
1.定义:IOC:(Inversion of control)控制反转又称依赖注入,指的是一个对象容器,将对象的依赖关系交由ioc容器来管理;
        控制器中的javaBean 对象有指定的配置文件映射生成,可以配置javaBean的依赖关系需要的对象有ioc提供。
2.方式set方法注入,接口注入,构造方法注入;
3.作用:Spring中IOC 最大的好处是便于替换对象,只要用 JavaBean 属性和配置文件加入依赖性(协作对象),然后可以很容易地在需要时替换具有类似接口的协作对象。 
4.作用域:默认的情况下是singleton;
singleton : 在每个Spring ioc容器中一个bean定义对应一个对象实例;
prototype : 在每个Spring ioc容器中一个bean定义对应多个对象实例;
request : 在一次HTTP请求中,一个bean定义对应一个对象实例;该作用域仅基于web的Spring ApplicationContext 情形下才有用;
session : 在一个HTTP Session 中,一个bean定义对应一个对象实例;该作用域仅基于web的Spring ApplicationContext 情形下才有用;
global session : 全局的HTTP Session 中,在每个Spring ioc容器中一个bean定义对应一个对象实例;该作用域仅基于web的Spring ApplicationContext 情形下才有用;   

 

Aop框架

定义:AOP是面向切面编程,是面向对象的补充;是将应用程序中的非业务逻辑代码提取出来,封装成一个切面,使用AOP,降低了代码的耦合度,提高了代码的重用;

      pring中采用了Aop管理事务

切入点:指切面应用到的位置,具体切入到哪些类,哪些方法;
连接点:指切面代码可以被切入到目标对象的位置(属性,方法)。

通知:

第一种:注解配置

   

   

    

第二种: Xml配置

   

spring的事务管理
1.定义:Spring 的事务管理:它保证了一系列操作可以作为一个工作单元,所有的操作被执行的机制。执行后只有两种结果,要么全部成功,要么全部失败。防止出现脏数据,防止数据库数据出现问题。
2.Spring提供的事务管理可以分为两类:编程式的和声明式的。
   编程式事务,比较灵活,但是代码量大,存在重复的代码比较多;
   声明式则比编程式更灵活;在使用Spring的声明式事务时不需要编写任何代码,它通过AOP实现事务管理。
3.spring是怎么实现事务管理:在配置文件中声明事务管理器,然后配置事务属性,定义事务切入点,最后通过AOP实现事务管理;
4.事务有七种传播性,四种隔离级别;

 我们先了解一下数据库的隔离级别: 

       脏读(Dirty read):在一个事务读取到被另一个事务修改后但还未提交的的数据时,如果这些修改在稍后被回滚,那么之前读取到的数据就是无效的

       幻读(Phantom read):幻读是当一个事务读取了几行记录后,另外一个事务插入一些数据,这时幻读就发生了,在后来的查询中第一个事务就会查询到一些原来没有的额外记录

       不可重复读(Nonrepeatable read)不可重复读发生在一个事务执行相同的查询两次或两次以上,但每一次的查询结果不同时。这通常是由于另一个并发的事务在两次查询之间更新了数据。

 Spring的隔离级别

springTransactionDefinition接口中定义了五个不同的事务隔离级别

ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应 

ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读

ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,

                                但是可能会出现不可重复读和幻像读。

ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

 

SpringTransactionDefinition接口中定义了七个事务传播行为

PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。

PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则以非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。

PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。

PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常

PROPAGATION_NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

 

 

 

http://www.cnblogs.com/874823214long/articles/3375414.html  spring总结

原创粉丝点击