Spring

 

1. spring简介

Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

2. Spring与解耦合

Spring根据功能的不同,将代码划分为两类:主业务逻辑与系统级服务(交叉业务逻辑)。主业务逻辑间,及主业务逻辑与系统级服务间的耦合度是较高的。Spring对于前述两种较高的耦合度,采用了两种不同的技术进行解耦。使用IoC解耦主业务逻辑间的耦合度,使用AOP解耦主业务逻辑与系统级服务间的耦合度。

3.Spring作用

Spring致力于提供一种方法管理你的业务对象。

Spring的主要目的是使JavaEE易用和促进好编程习惯。

Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

4.Spring起源

Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿、低效、脱离现实的特点。

传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务、事务处理等。

5.Spring优点

方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

6.Spring体系结构

Spring 框架是一个分层架构,它包含一系列的功能要素并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分,如下图所示:

7.Spring与IOC

IoC,Inversion of Control,控制反转。将传统上由程序代码直接操控的对象创建权交给容器,通过容器来管理对象的生命周期。控制反转是对对象控制权的转移,从代码本身转移到了容器。

IoC是一种思想,是一个概念,其实现方式有很多。当前比较流行的实现方式有两种:依赖注入与依赖查找。

l 依赖查找:DL,Dependency Lookup,代码中需要给出目标对象的存放路径,系统会根据路径到容器中查找相应的对象。典型的应用是JNDI(Java Naming and Directory Interface,Java命名与目录接口,这是一个第三方容器,是一个服务器)。

l 依赖注入:DI,Dependency Injection,代码中无需给出目标对象的定位路径,只需给定对象名称或类型,系统就会直接到容器中进行查找。是目前最优秀的解耦方式。典型应用是Spring。

 

8.spring与事务

这是典型的AOP的应用。

1.Spring事务管理的API

(1) 平台事务管理器接口

A、 常用的实现类

l DataSourceTransactionManager:使用JDBC、MyBatis、iBatis等进行持久化时使用。

l HibernateTransactionManager:使用Hibernate进行持久化时使用。

B、 Spring回滚方式

Spring事务默认的回滚方式是:发生运行时异常回滚,发生受查异常提交。

(2) 事务定义接口

MySQL默认的事务隔离级别是可重复读;Oracle默认的事务隔离级别是读已提交。

事务传播行为是指,处于不同事务中的方法在相互调用时,执行期间事务的维护情况

原文地址:https://www.cnblogs.com/liule66/p/12228094.html