第十一章spring入门.docx
- 文档编号:10464875
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:13
- 大小:61.60KB
第十一章spring入门.docx
《第十一章spring入门.docx》由会员分享,可在线阅读,更多相关《第十一章spring入门.docx(13页珍藏版)》请在冰豆网上搜索。
第十一章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"> --另一种配置方式 --> 指定了构造方法参数和类型。 当然,也许会遇到多个参数的构造,那么也可以指定第几个参数:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十一 spring 入门