第十一章spring入门.docx

上传人:b****7 文档编号:10464875 上传时间:2023-02-13 格式:DOCX 页数:13 大小:61.60KB
下载 相关 举报
第十一章spring入门.docx_第1页
第1页 / 共13页
第十一章spring入门.docx_第2页
第2页 / 共13页
第十一章spring入门.docx_第3页
第3页 / 共13页
第十一章spring入门.docx_第4页
第4页 / 共13页
第十一章spring入门.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

第十一章spring入门.docx

《第十一章spring入门.docx》由会员分享,可在线阅读,更多相关《第十一章spring入门.docx(13页珍藏版)》请在冰豆网上搜索。

第十一章spring入门.docx

第十一章spring入门

第十一章spring应用

基本概念

Ø学习目标

Ø学习内容

Spring简介:

Spring是一个开源框架,它由RodJohnson创建。

它是为了解决企业应用开发的复杂性而创建的。

Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。

然而,Spring的用途不仅限于服务器端的开发。

从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

特点:

控制反转(InversionofControl),还有一个更容易明白的词是依赖注入(DependencyInjection)——不创建对象,但是描述创建它们的方式。

在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。

Spring通过控制反转(IoC)技术促进了松耦合。

当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。

面向切面(AOP)——AOP(Aspect-orientedprogramming)和IOC是补充性的技术,Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如事务(transaction)管理)进行内聚性的开发。

应用对象只实现它们应该做的——完成业务逻辑。

并不负责其它的系统级关注点,例如日志或事务支持。

在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和Java类中才能实现日志功能。

在AOP方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。

优势就是Java类不需要知道日志服务的存在,也不需要考虑相关的代码。

轻量级(Lightweight)容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。

然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

核心包在文件容量上只有不到1MB的大小,而使用Spring核心所需要的资源也是很小的。

除了这些特性之外,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供one-stopshop的框架整合方案。

Ø持久层

Spring提供对持久层的整合,如JDBC、O/RMapping工具(Hibernate、iBATIS)、事务处理等。

ØWeb框架

Spring也提供Web框架的解决方案,但您也可以将自己所熟悉的Web框架与Spring整合,像是Struts、Webwork等,都可以与Spring整合而成为适用于自己的解决方案。

对于一些服务,例如JNDI、Mail、排程、远程等,Spring不直接提供实作,而是采取抽象层方式进行包装,让这些服务在使用时可以有一致的使用模式且更为方便。

组成:

Spring由七个模块组成,各模块作用如下:

1、核心容器:

核心容器提供Spring框架的基本功能。

核心容器的主要组件是BeanFactory,它是工厂模式的实现。

BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

2、Spring上下文:

Spring上下文是一个配置文件,向Spring框架提供上下文信息。

Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。

3、SpringAOP:

通过配置管理特性,SpringAOP模块直接将面向方面的编程功能集成到了Spring框架中。

所以,可以很容易地使Spring框架管理的任何对象支持AOP。

SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。

通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。

4、SpringDAO:

JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。

异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。

SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。

5、SpringORM:

Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。

所有这些都遵从Spring的通用事务和DAO异常层次结构。

6、SpringWeb模块:

Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。

所以,Spring框架支持与JakartaStruts的集成。

Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

7、SpringMVC框架:

MVC框架是一个全功能的构建Web应用程序的MVC实现。

通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。

Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。

Spring的核心要点是:

支持不绑定到特定J2EE服务的可重用业务和数据访问对象。

毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。

与前的Struts和hibernate相同,使用spring框架需要先下载:

解压缩下载到的压缩包,解压缩后的文件夹应用如下几个文件夹。

dist:

该文件夹下放Spring的jar包,通常只需要Spring.jar文件即可。

该文件夹下还有一些类似spring-Xxx.jar的压缩包,这些压缩包是spring.jar压缩包的子模块压缩包。

除非确定整个J2EE应用只需要使用Spring的某一方面时,才考虑使用这中分模块压缩包。

通常建议使用Spring.jar

docs:

该文件夹下包含spring的相关文档、开发指南及API参考文档。

lib:

该文件夹下包含spring编译和运行所依赖的第三方类库,该路径下的类库并不是spring必需的,但如果需要使用第三方类库的支持,这里的类库就是必需要的。

samples:

该文件夹下包含Spring的几个简单例子,可作为Spring入门学习的案例。

src:

该文件夹下包含Spring的全部源文件,如果开发过程中有地方无法把握,可以参考该源文件,了解底层实现。

Jar包说明:

除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有类文件。

(1)spring-core.jar这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。

(2)spring-beans.jar这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行InversionofControl/DependencyInjection(IoC/DI)操作相关的所有类。

如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。

(3)spring-aop.jar这个jar文件包含在应用中使用Spring的AOP特性时所需的类。

使用基于AOP的Spring特性,如声明型事务管理(DeclarativeTransactionManagement),也要在应用里包含这个jar包。

(4)spring-context.jar这个jar文件为Spring核心提供了大量扩展。

可以找到使用SpringApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。

(5)spring-dao.jar这个jar文件包含SpringDAO、SpringTransaction进行数据访问的所有类。

为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。

(6)spring-hibernate.jar这个jar文件包含Spring对Hibernate2及Hibernate3进行封装的所有类。

(7)spring-jdbc.jar这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。

(8)spring-orm.jar这个jar文件包含Spring对DAO特性集进行了扩展,使其支持iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。

这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。

(9)spring-remoting.jar这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、HttpInvoker、JAX-RPC)方面的类。

(10)spring-support.jar这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(JavaMail、COSMail)、任务计划Scheduling(Timer、Quartz)方面的类。

(11)spring-web.jar这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类

(12)spring-webmvc.jar这个jar文件包含SpringMVC框架相关的所有类。

包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。

当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。

(13)spring-mock.jar这个jar文件包含Spring一整套mock类来辅助应用的测试。

Spring测试套件使用了其中大量mock类,这样测试就更加简单。

模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

除了上述的一些jar包之外,spring在集成开发时,需要加入几个第三方提供的包:

aopalliance-1.0.jar

aspectjrt-1.5.3.jar

aspectjweaver-1.5.3.jar

cglib-2.1.3.jar

将上述jar包加入工程后,我们就可以来编写spring应用程序了。

Spring是个容器,那么我们就从如何,从容器中取得对象开始:

从spring容器中获得容器有三种方式,这三种实现方式:

Interfaceinjection、(有些书上也叫做工厂方式注入)

Setterinjection

Constructorinjection。

分别被称为:

Type1IoC、Type2IoC和Type3IoC。

先来建立一个对象:

Student.java

packagech01.type1.entity;

publicclassStudent{

publicstaticStudentgetStu(){

returnnewStudent();

}

Stringname="张三";

publicStringtoString(){

returnname;

}

}

建立spring的配置文件

Student.xml

xmlversion="1.0"encoding="UTF-8"?

>

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xmlns="http:

//www.springframework.org/schema/beans"

xsi:

schemaLocation="

http:

//www.springframework.org/schema/beanshttp:

//www.springframework.org/schema/beans/spring-beans-3.0.xsd">

Type1Ioc的配置方式:

指定了一个类型,和这个类型的工厂方法。

建立测试文件

Test.java

packagech01.type1.util;

importorg.springframework.beans.factory.BeanFactory;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importorg.springframework.context.support.FileSystemXmlApplicationContext;

importch01.type1.entity.Student;

publicclassTest{

publicstaticvoidmain(String[]args){

ApplicationContextac=

//相对于当前工程路径

//newClassPathXmlApplicationContext("ch01/type1/student.xml");

//下面的实现方式,要根据你文件的真实路径使用。

newFileSystemXmlApplicationContext("E:

/project/javaee/springtest/src/ch01/type1/student.xml");

Studentstu=(Student)ac.getBean("ch01.type1.entity.Student");

System.out.println(stu);

}

}

ApplicationContext接口是BeanFactory接口的子接口,它增强了BeanFactory的功能,处于context包下。

很多时候,ApplicationContext允许以声明式方式操作容器,无须手动创建。

可利用如ContextLoader的支持类,在Web应用启动时自动创建ApplicationContext。

当然,也可以采用编程方式创建ApplicationContext。

FileSystemXmlApplicationContext实现了真实路径访问配置文件的方式,你可以在任何位置配置你的spring。

ClassPathXmlApplicationContext提供了在当前工程中相对的找到配置文件。

与上面的实现相比,肯定会适合更多情况。

Spring还提供了多个配置文件同时使用的方式:

ApplicationContextctx=newClassPathXmlApplicationContext("config.xml");

String[]locations={"config1.xml","config2.xml","config3.xml"};

ApplicationContextctx=newClassPathXmlApplication(locations);

再来看一个Type2IoC的例子:

Student.java

packagech01.type2.entity;

publicclassStudent{

Stringname;

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

}

Student.xml

xmlversion="1.0"encoding="UTF-8"?

>

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xmlns="http:

//www.springframework.org/schema/beans"

xsi:

schemaLocation="

http:

//www.springframework.org/schema/beanshttp:

//www.springframework.org/schema/beans/spring-beans-3.0.xsd">

--要注意这五个特殊的字符&<>"'使用时要用到

[CDATA[]]>这是让xml把之间的内容当做文本-->

[CDATA[a&<>"']]>

前面的例子中,我们只是配置了类型,这里为了方便使用,还可以指定一个id属性

Type2IoC需要我们原生类有相应的set方法。

[CDATA[a&<>"']]>

这里演示了特殊字符的注入方式。

Test.java

packagech01.type2.util;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importch01.type2.entity.Student;

publicclassTest{

publicstaticvoidmain(String[]args){

Students=newStudent();

System.out.println(s.getName());

ApplicationContextac=

newClassPathXmlApplicationContext("ch01/type2/student.xml");

Studentstu=(Student)ac.getBean("student");

System.out.println(stu.getName());

}

}

运行后,输出这样的结果:

null

a&<>"'

这是效果对比,在组装前,我们得到的是null。

而在spring管理后,有了我们配置的值。

Type3IOC是通过构造方法注入内容:

Student.java

packagech01.type3.entity;

publicclassStudent{

Stringname;

publicStudent(Stringname){

this.name=name;

}

publicStringtoString(){

returnname;

}

}

Test.java

packagech01.type3.util;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importch01.type3.entity.Student;

publicclassTest{

publicstaticvoidmain(String[]args){

ApplicationContextac=

newClassPathXmlApplicationContext("ch01/type3/student.xml");

Studentstu=(Student)ac.getBean("stu");

System.out.println(stu);

}

}

配置文件:

student.xml

xmlversion="1.0"encoding="UTF-8"?

>

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xmlns="http:

//www.springframework.org/schema/beans"

xsi:

schemaLocation="http:

//www.springframework.org/schema/beans

http:

//www.springframework.org/schema/beans/spring-beans-3.0.xsd">

张三

--另一种配置方式

-->

张三

指定了构造方法参数和类型。

当然,也许会遇到多个参数的构造,那么也可以指定第几个参数:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1