Spring总结

简介

 

传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现WriteOnce及Run Anywhere的承诺。在这种背景下,Spring以“救世主”的身份出现啦。它是开源框架,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能。它致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

 

Spring优点

 

1、轻量级框架,低侵入式设计

2、降低Java EE API的使用难度,简化开发。

3、方便集成各种优秀框架。

4、使用DI机制降低了业务对象替换的复杂性,大大降低了组件之间的耦合,使得程序易于单元测试。

5、AOP技术允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用

 

Spring的两大核心内容

IOC

IOC (Inversion of Control)是一个重要的面向对象编程的法则,用来削减计算机程序的耦合问题。它还有一个名字叫做依赖注入(Dependency Injection)。简称DI。

spring中的依赖注入DI(dependence injection)共有三种方式:第一种是接口注入(Interface Injection)第二种是get set注入(set/get Injection)第三种是构造器注入(Constructor Injection)

1、接口注入

组件需要依赖特定接口的实现,其中的加载接口实现和接口实现的具体对象都是由容器来完成。这样,接口必须依赖容器,这样的组件具有侵入性,降低了重用性。其中如J2EE开发中常用的Context.lookup(ServletContext.getXXX),都是接口注入的表现形式。(这种注入方式不是常用的)

2、getter/setter方式注入

对于需要注入的东西比较明确。符合java的设计规则。更适合java开发人员,使用起来更加自然,更加方便。

 

 

3、构造器方式注入

在类加载的时候,就已经注入依赖的组件。但是若是参数多的话,使用起来不方便。

但是后两种注入方式是spring常用的,而第一种接口注入方式不常用。

 

 

AOP

AOP为Aspect Oriented Programming的缩写,即面向切面编程(也叫面向方面),是一种可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

 

Cross  cutting  concern(横切关注点)

横切关注点是分散在每个模块中,解决同一样的问题的关注点,它是一种独立服务。

 

Aspect(切面)

切面是关注点的模块化,关注点可能横切多个对象。

个人理解是同一类型关注点的集合。

 

Join point(连接点)

连接点也就是运用程序执行过程中需要插入切面模块的某一点.连接点主要强调的是一个具体的”点”概念.这个点可以是一个方法、一个属性、构造函数、类静态初始化块,甚至一条语句。

个人理解:某一个应用中有多个关注点,但是我只想在某些关注点上操作,那么这些要操作的关注点就是连接点。

 

Pointcuts(切入点)

切入点指一个或多个连接点。

个人理解:切入点是某次操作用到的连接点。也就是说JoinPoint是候选点,而pointcut是真正应用的那些点。

 

Advice(增强或通知)

增强里面定义了切面中的实际逻辑(即实现),比如日志的写入的实际代码,或是安全检查的实际代码。或者说:增强是指在定义好的切入点处,所要执行的程序代码。

 

一般情况下增强(通知)主要有前增强、后增强、环绕增强三种基本类型。
前增强(Before advice):是指在连接点之前,先执行增强中的代码 。
后增强(After advice):是指在连接点执行后,再执行增强中的代码。后增强一般分为连接点正常返回增强及连接点异常返回增强等类型。
环绕增强(Around advice):是一种功能强大的增强,可以自由改变程序的流程,连接点返回值等。在环绕增强中出除了可以自由添加需要的横切功能以外,还需要负责主动调用连接点(通过proceed)来执行激活连接点的程序。

 

 

Weaving(织入)

织入是指把解决横切问题的切面模板,与系统中的其它核心模块通过一定策略或规则组合到一起的过程。在Java领域,主要包括以下三种织入方式:
1、运行时织入:即在JAVA运行的过程中,使用JAVA提供代理来实现织入。
2、类加载器织入:指通过自定义的类加载器,在虚拟机JVM加载字节码的时候进行织入。

3、编译器织入:使用专门的编译器来编译包括切面模块在内的整个应用程序,在编译的过程中实现织入,这种织入是功能最强大的。

 

Target object(目标对象)

增强被应用的对象

 

Proxy(AOP代理)

实际业务对象的代理对象。

AOP和OOP的区别

OOP解决问题的重点在于对具体领域模型的抽象,主要是针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP解决问题的关键则在于对关注点的抽象,主要是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

 

 

结束语

spring确实是一个比较优秀的框架,以后继续深入研究。

标签