Spring-概念的总结(二)


Spring是什么?

1,是一个应用程序框架,为应用程序的开发提供强大的支持,例如对事务处理和持久化的支持等等。

2,是一个bean容器,管理bean对象的整个生命周期,维护bean的各种存在状态,例如bean对象的实例化、销毁、bean的单实例和多实例状态等等。

3,是轻量级的框架和容器,与EJB相比较而言

Spring-概念的总结(二)_第1张图片

分别的作用:

核心容器(Spring core)

核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。BeanFactory使用依赖注入的方式提供给组件依赖。

Spring上下文(Spring context)

Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,如JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring面向切面编程(Spring AOP)

通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。


Spring DAO模块

DAO模式主要目的是将持久层相关问题与一般的的业务规则和工作流隔离开来。Spring 中的DAO提供一致的方式访问数据库,不管采用何种持久化技术,Spring都提供一直的编程模型。Spring还对不同的持久层技术提供一致的DAO方式的异常层次结构。

Spring ORM模块

Spring 与所有的主要的ORM映射框架都集成的很好,包括Hibernate、JDO实现、TopLink和IBatis SQL Map等。Spring为所有的这些框架提供了模板之类的辅助类,达成了一致的编程风格。

Spring Web模块

Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。Web层使用Web层框架,可选的,可以是Spring自己的MVC框架,或者提供的Web框架,如Struts、Webwork、tapestry和jsf。

Spring MVC框架(Spring WebMVC)

MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。Spring的MVC框架提供清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器。Spring支持多种视图技术。 


 轻量级和重量级怎么区分?

轻量级和重量级的概念划分

轻量级和重量级的划分,主要看它使用了多少服务。使用的服务越多,容器为普通java对象做的工作也

越多,必然会影响到应用的发布时间或者是运行性能。

对于spring容器,它提供了很多服务,但是这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明

应用该服务,如果应用服务很少,如:只使用了spring核心服务,我们就可以认为此时应用属于轻量级应用,反之就

属于重量级。目前EJB容器因为它默认为应用提供了EJB规范的所有服务,所以它属于重量级的。

重点)控制反转(IOC)依赖注入(DI)是什么?

控制反转(IoC/Inverse Of Control):   调用者不再创建被调用者的实例,由spring框架实现(容器创建)所以称为控制反转。

依赖注入(DI/Dependence injection) :   容器创建好实例后再注入调用者称为依赖注入。

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例,。如果创建被调用者实例的工作不再由调用者来完成,而是由外部容器完成,因此称为控制反转; 创建被调用者 实例的工作通常由外部容器来完成,然后注入调用者,因此也称为依赖注入。

依赖和耦合(Dependency and Coupling)是什么?

         如果模块A调用模块B提供的方法,或访问模块B中的某些数据成员(当然,在面向对象开发中一般不提倡这样做),我们就认为模块A依赖于模块B,模块A和模块B之间发生了耦合

  那么,依赖对于我们来说究竟是好事还是坏事呢?

  由于人类的理解力有限,大多数人难以理解和把握过于复杂的系统。把软件系统划分成多个模块,可以有效控制模块的复杂度,使每个模块都易于理解和维护。但在这种情况下,模块之间就必须以某种方式交换信息,也就是必然要发生某种耦合关系。如果某个模块和其它模块没有任何关联(哪怕只是潜在的或隐含的依赖关系),我们就几乎可以断定,该模块不属于此软件系统,应该从系统中剔除。如果所有模块之间都没有任何耦合关系,其结果必然是:整个软件不过是多个互不相干的系统的简单堆积,对每个系统而言,所有功能还是要在一个模块中实现,这等于没有做任何模块的分解。

  因此,模块之间必定会有这样或那样的依赖关系,永远不要幻想消除所有依赖。但是,过强的耦合关系(如一个模块的变化会造成一个或多个其他模块也同时发生变化的依赖关系)会对软件系统的质量造成很大的危害。特别是当需求发生变化时,代码的维护成本将非常高。所以,我们必须想尽办法来控制和消解不必要的耦合,特别是那种会导致其它模块发生不可控变化的依赖关系。依赖倒置、控制反转、依赖注入等原则就是人们在和依赖关系进行艰苦卓绝的斗争过程中不断产生和发展起来的。

重点)AOP(面向切面)是什么?

在上篇博客,开始导包时候有些jar包就是为了实现AOP而导入的。

Spring-概念的总结(二)_第2张图片

具体jar包的作用这个不多说,主要理解下AOP的概念

面向切面编程是对程序OOP编程的另一种补充。OO将应用程序分解为对象层次,而AOP则将程序分解为各个方面或者关系。这就使得模块之间的关联能够跨多个对象进行处理,例如事务管理(在术语上被称为"横切")。

Spring中一个重要的组成部分就是AOP框架。如果Spring的IoC容器(BeanFactory和ApplicationContext)不依赖于AOP,也就意味着你不需要使用AOP。AOP为Spring IoC提供了一个非常能干的中间件解决方案。

AOP在Spring中的使用:

提供公布式企业级服务,特别是替代EJB公布式服务。最重要的是这种服务是事务管理,建立在Spring的事务抽象上。

允许使用者实现自定义切面,对自己的OOP补充AOP。

因此你可以将Spring AOP看作一种可以允许Spring提供公布式事务管理的技术,而这种技术并不需要EJB;或者使用Spring的AOP框架来实现自己的切面。

Aspect(切面):一种跨多对象的横向模块化关系。J2EE应用程序中的事务管理就是一个很好的横切关系的例子。切面作为顾问和拦截应用于Spring中。

Joinpoint(接合点):程序执行过程中的点,就好象方法中的一个调用,或者一个特别的被抛出的异常。在Spring AOP中,一个接合点通常是方法调用。Spring并不明显地使用"接合点"作为术语;接合点信息可以通过MethodInvocation的参数穿过拦截器访问,相当于实现org.springframework.aop.Poinkcut接口。

Advice(通知):被AOP框架使用的特定接合点。不同的通知类型包括:"around","before"和"throws"通知。通知类型在下面介绍。许多AOP框架,包括Spring,通知模块就如同一个拦截器,维持一系列拦截器围绕着接合点。

Pointcut(切入点):当一个通知将被激活的时候,会指定一些结合点。一个AOP框架必须允许开发者指定切入点:例如使用正则表达式。

Introduction(引入):向一个通知类中添加方法或成员变量。Spring允许你向任何通知类中引入新接口。例如,你可能会使用一个引入,以使得任何实现IsModified接口的对象简单的缓存。

Target object(标签对象):包含接合点的对象。也被通知对象或者代理对象所引用。

AOP proxy(AOP代理):被AOP框架创建的对象,包括通知。在Spring中,一个AOP代理将会是一个JDK动态代理或者一个CGLIB代理。

Weaving(编织):聚合切面以生成一个通知对象。这可以在编译时(比如使用AspectJ编译器)或在运行时完成。Spring,如同其它纯Java AOP框架一样,在运行时完成编织。


通知类型介绍:

Around advice(围绕通知):通知围绕一个接合点(如一个方法调用)。这是最强有力的通知类型。围绕通知将会在方法调用之前或之后完成自定义行为。他们能够选择是否通过接合点,或者返回他们自己特定的值,甚至抛出异常。

Before advice(提前通知):通知在接合点之前执行,但是并却并没有能力阻止流程执行接合点(如果不抛出异常)。

Throws advice(抛出通知):如果一个方法抛出异常,通知将会被执行。Spring提供了健壮的类型以抛出通知,所以你可以按自己的喜好编写代码捕捉异常(和子类),而不需要通过Throwable或Exception。

After returning advice(返回通知):在接点正常完成之后,通知将会被执行。例如,如果一个方法返回却没有抛出异常。

补:

事务是什么?

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。





你可能感兴趣的:(spring,AOP,事务,IOC,依赖,耦合,轻量级)