现在的位置: 首页 > 综合 > 正文

Spring核心技术

2013年01月25日 ⁄ 综合 ⁄ 共 2475字 ⁄ 字号 评论关闭

Ch1. Spring概述

Spring为企业应用的开发提供了一个轻量级的解决方案,包括基于依赖注入的核心机制,基于AOP的声明式事务管理,与多种持久层技术的整合,以及优秀的Web MVC框架等。Spring支持对POJOPlain Object Java Object,指最传统的Java对象,和任何模式都无关)的管理。

    Spring的作者是Rod JohnsonSpring独立于应用服务器,甚至无需应用服务器的支持。

1.    Spring体系介绍

l         核心机制

l         Context容器

l         Web支持

l         MVC框架

l         DAO支持

l         ORM支持

l         面向方面编程支持

1.1Sping的核心和Context

Spring使用BeanFactory作为应用中负责生产和管理各组件的工厂,同时也还是组件运行的容器。BeanFactory根据配置文件确定容器中bean的实现,管理bean之间的依赖关系。ApplicationContextBeanFactory的增强,该接口提供了在J2EE应用中的大量增强功能。

1.2SpringWebMVC

SpringWeb框架围绕分发器(DispatcherServlet)设计,DispatcherServlet将请求分发到不同的处理器。SpringMVC框架提供清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器。Sping支持多种表现层技术:VelocityXSLT等等;甚至可以直接输出pdf电子文档,或者excel文档。

1.3Spring的面向方面的编程

AOP完善Spring的依赖注入(DI)。AOP提供声明式事务管理。Spring支持用户自定义切面。Spring也能和AspectJ整合。

1.4Spring的持久化支持

对各种持久化技术提供一致的编程方式。

2.    Spring的基本设计思想

Spring实现了两种设计模式:工厂模式和单例模式。

例如:使用Spring至少有一个好处,即使没有PersonFactory,程序一样可以使用工厂模式,所有工厂模式的功能,Spring都可以提供。Spring对接受容器管理的bean,默认采用单体模式管理。

3.    Spring的核心机制

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色需要调用另一个角色的协助时,在传统的程序设计中,通常由调用者创建被调用者的实例。但在Spring中,创建被调用者的工作不再由调用者完成,因此称作控制反转;创建被调用者的实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。Spring的依赖注入对于调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。依赖注入通常有两种:设值注入和构造注入。

3.1设值注入

通过setter方法来传入被调用者的实例。Spring会自动接管每个bean定义里的property元素定义。Spring会在执行无参构造函数和创建默认的bean实例后,调用对应的setter方法为程序注入属性值。Property定义的属性值将不再由该bean来主动创建、管理。而改为被动接受Spring的注入。业务对象的更换变得相当简单,对象和对象之间的依赖关系从代码里分离出来,通过配置文件动态管理。

3.2构造注入

通过构造函数完成依赖关系的设定。区别在于:创建Person实例中Axe属性的时机不同――设值注入是先创建一个默认的bean实例,然后调用对应的setter方法注入依赖关系;而构造注入则在创建bean实例时,已经完成依赖关系的注入。

注入方式

优点

设值注入

(1)         直观

(2)         对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,性能下降

(3)         属性可选时,多参数的构造器更加笨重

构造注入

(1)         可在构造器中决定依赖关系的注入顺序

(2)         无需担心后续代码的破坏

(3)         更符合高内聚原则

建议采用设值注入为主,构造注入为辅的注入策略。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Ch2 Spring中的beanBeanFactory

1.    Bean

1.1定义bean时,必须指定两个属性:

(1)      id:确定bean的唯一标识符。

(2)      class:bean的具体实现类。

 

1.2bean的基本行为

单例(singleton)和原型(prototype)两类。每次请求单例的bean,返回同一个对象;对于non-singleton行为的beanBeanFactory角色的行为几乎完全等于new关键字的作用,每次请求都将产生新的实例。可以通过singleton="true"来设定bean的基本行为。建议Spring中的bean应满足以下几个原则:

1)每个bean的实现类都应该提供无参数的构造函数。

2)接受构造注入的bean,则应提供对应的构造函数。

3)接受设值注入的bean,则应提供对应的setter方法,并不强制提供对应的getter方法。

 

1.3 实例化bean

3种方法:

1)调用构造函数“new”一个实例。

2BeanFactory调用某个类的静态工厂方法创建bean

主要有以下变化:

l         class元素不再是bean的实现类,而是静态工厂类。

l         必须有factory-method属性确定产生实例的静态工厂方法。

l         静态工厂方法需要参数,则使用<constructor-arg>元素确定静态工厂方法。

(3)      BeanFactory调用实例工厂方法创建bean

采用实例工厂方法创建bean不能含有class元素,应指定如下两个属性:

l         工厂bean

抱歉!评论已关闭.