当前位置:文档之家› Spring技术介绍

Spring技术介绍

一、基本概念Spring 的核心是轻量级(Lightweight )的容器(Container ),它实现了IoC 容器、非侵入性(No intrusive )的框架,并提供AOP 概念的实现方式,提供对持久层(Persistence )、事务(Transaction )的支持,提供MVC Web 框架的实现,并对一些常用的企业服务API (Application Interface )提供一致的模型封装,是一个全方位的应用程序框架(Application framework ),另外,Spring 也提供了对现有框架(Struts 、JSF 、Hibernate 等)的整合方案。

Spring 旨在分离体系结构的层次,因此每一层都可以修改而不会影响到其它层。

每一层都不知道其上层的关注点;就其可能而言,只对所紧挨的下一层有依赖。

层与层之间的依赖通常是以接口的形式表现,以确保其耦合尽可能松散。

容器管理事务,容器,贯穿始终:1、对象生命周期的管理。

2、容器本身具备功能,加在自己的类中。

需要自己调用则为显示调用。

而尽量用容器隐式调用,Spring 即为隐式对现有表现层的支持与ORM 紧密结合,可使用声明式事务管理 AOP 标准接口的实现(容器管理的声明式的种种事务)对JDBC 采用模板回调;声明的JDBC 事务管理.提供了Bean 工厂对Bean 工厂的扩展(比如对事务、国际化的支持)自己的MVC 实现调用、声明式编程。

Spring 轻量级容器体现在:只需设置一个Jar 文件到CLASSPATH ,不用去调用它,但又可以拥有其强大的功能。

组件的极大程度的复用。

让层与层中耦合度低——Loosely-Coupled 工厂类创建DAO 对象。

声明式编程:在xml 文件中声明。

基于POJO 类,支持事务,事务是根本;而EJB 事务由Container 管理。

Spring 将 View 层与持久层,比如与Hibernate 联系起来。

Spring 简化Hibernate 的使用,还可以帮助管理Hibernate 。

Spring 本身没有O-R_mapping ,因为有Hibernate ,她已经做得很好了。

Spring 将编译时异常(checked )转化为运行时异常(runtime )。

比如,JDBC 则为编译时异常,即必须写try…catch ;而Hibernate 程序为运行时异常。

在spring-framework-2.0.5\dist 目录下 有jar 文件、 dtd 文件、 tld 文件。

总之,Spring 是一个轻型容器(light-weight container ),其核心是Bean 工厂(Bean Factory ),用以构造我们所需要的M (Model )。

在此基础之上,Spring 提供了AOP (Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean 工厂的扩展ApplicationContext 更加方便我们实现Java EE 的应用;DAO/ORM 的实现方便我们进行数据库的开发;Web MVC 和Spring Web 提供了Java Web 应用的框架或与其它流行的Web 框架进行集成。

二、IoC (Inversion of Control )1、定义:组件..之间的依赖关系....由容器..在运行时决定。

例如:B 对象所依赖的A 对象是由 Spring 创建好并且通过Set 方法传递注入过来的。

最基本的优点体现在:若A 为接口,让B 依赖于接口。

只看接口不管实现类。

可把工厂类全部替换掉。

对象均为容器创建。

到时还能把容器的功能融入到其中。

IoC 要求:容器尽量不要侵入到应用程序中去,应用程序本身可以依赖于抽象的接口,容器根据这些接口所需要的资源注入到应用程序中,也就是说应用程序不会主动向容器JavaBean 调用/包含 Spring控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。

请求资源;容器会自动把这些对象给应用程序。

●IoC有基于set方式的注入(property)、基于构造方法的注入。

●IoC核心的bean工厂:在Spring中,bean工厂创建的各个实例称作bean。

业务组件间的依赖是容器(Bean工厂)解决的。

BeanFactory负责读取Bean定义文件,管理对象的加载、生成,维护Bean对象与Bean对象的依赖关系,负责Bean的生命周期,对于简单的应用程序来说,使用BeanFactory就已经足够来管理Bean,在对象的管理上就可以获得许多的便利性。

●Spring中有两个包里的类都可以做IoC:beans包:org.springframework.beans包;context包:org.springframework.context包,其类功能更加强大。

2、bean工厂创建bean的三种方式:✧通过构造方法直接创建:<bean id=”your_id” class=”bean class name”>✧通过静态工厂方法创建:<bean id=“your_id”class=”factory class name” factory-method=”createFactory”>✧通过非静态工厂方法创建:<bean id=”factory” class=”factory class name”><bean id=”your_id”factory-bean=” factory” factory-method=” createFactory”>3、Spring中实现IoC的方式:依赖注入(Dependency Injection)Spring中依赖注入的两种方式:通过setter方法注入:<property name=”username”><value>Huangwp</value></property>其中,name属性的取值依setter方法名而定。

Spring推荐使用setter方法注入。

通过构造方法注入:<constructor-arg index=”0”><value>黄总</value></ constructor-arg><constructor-arg index=”1”> <value>男</value></ constructor-arg><constructor-arg type=“int ”> <value>46</value></ constructor-arg>其中,index 表示构造方法中的参数索引(第一个参数索引为0),type 表示构造方法中参数的类型。

● 两种注入方式的区别:⏹ Constructor :可以在构建对象的同时,把依赖关系也构建好。

对象创建后好就已经准备好了所有的资源,安全性高。

⏹ Setter: 创建完对象之后再通过set()方法进行属性的设定。

4、设置属性时可选的标签:value :基本类型(包装类型)或String 类型 ref :引用工厂中其它的bean list :List 或数组类型set :Set 类型。

用法与list 类似。

map :Map 类型props :Properties 类型,键值为String 类型的,所以直接写值。

举例:List SetMap Properties如果key依赖其它对象用key-ref, 如果还是一个Map,可再嵌套。

◆abstract 属性如果在配置文件中把某个方法设置成为abstract=“true”的(缺省false ),那么不能通过beanFactory 获得bean 的实例。

◆lazy-init属性如果使用的是XmlBeanFactory来获得beanFactory:缺省的是延迟加载,如果不想延迟加载,则需要把工厂bean实例的lazy-init设置为false,例如:<bean id=“carFactory" lazy-init="false" class="spring. ioc.CarFactory"></bean>5、自动装配:自动将某个bean 注入到另一个bean的属性当中。

(bean标签的autowire属性)其分类如下表:(大型应用不推荐使用,因为可读性太差)模式说明no 不使用自动装配。

必须通过ref元素指定依赖,这是默认设置。

由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。

而且在某种程度上,它也是系统架构的一种文档形式。

byName 根据属性名自动装配。

此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。

例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。

byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。

如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。

若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。

如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。

constructor与byType的方式类似,不同之处在于它应用于构造器参数。

如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

模式 说明autodetect 通过bean 类的自省机制(introspection )来决定是使用constructor 还是byType 方式进行自动装配。

如果发现默认的构造器,那么将使用byType 方式。

6、依赖检查:检查bean 的属性是否完成依赖关系的注入(bean 标签的dependency-check 属性)⏹ 作用:检查bean 的属性是否完成依赖关系的注入 ⏹ 分类:错误!未找到引用源。

.simple : 只查看简单的类型是否完成依赖注入(基本类型和字符串)错误!未找到引用源。

.objects:检查对象类型是否完成依赖注入 错误!未找到引用源。

相关主题