290 likes | 603 Views
Spring Framework( 一 ). 快速入门. 课程介绍. 本课程主要讲授 Spring 1.x 基础知识 适用于 Java 开发工程师 面向的学员是 对 Servlet , JSP 有基本了解的 J2EE 开发工程师 全部课程时间大约是 120 分钟. 概 要. Spring Framework 概览 Spring 开发快速入门. 1 什么是 Spring?.
E N D
Spring Framework(一) 快速入门
课程介绍 • 本课程主要讲授Spring 1.x基础知识 • 适用于Java开发工程师 • 面向的学员是对Servlet,JSP有基本了解的J2EE开发工程师 • 全部课程时间大约是120分钟 周甫(zoofchow@hotmail.com)
概 要 • Spring Framework概览 • Spring开发快速入门 周甫(zoofchow@hotmail.com)
1 什么是Spring? • Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 • 目的:解决企业应用开发的复杂性 • 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 • 范围:任何Java应用 • 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架 周甫(zoofchow@hotmail.com)
1.1 Spring的特点 Spring具有以下特点: • 轻量级 Spring 的核心文件只有不到 1MB 的大小,而使用 Spring 核心所需要的资源也是 很小的,而 Spring 是个非侵入性框架,它的目的之一,是让应用程序不感受到框 架的存在,减低应用程序从框架移植时的负担。 • 容器 Spring 核心本身是个容器,管理对象的生命周期、对象的组态、相依注入等,并可以控制对象的创建方式。 • IoC Spring 的核心概念是IoC,更具体而易懂的名词是依赖注入(Dependency Injection),使用 Spring,程序员不必自己在程序代码中维护对象的依赖关系,只需在配置文件中加以设定,Spring 核心容器会自动根据设定将依赖注入指定的对象。 周甫(zoofchow@hotmail.com)
1.2 Spring的历史 Spring Framework实际上是Rod Johnson所著的《Expert One-on-One J2EE Designand Development》一书中所阐述的设计思想的具体实现。在One-on-One这本书中Rod Johnson倡导J2EE实用主义的设计思想,并随书提供了一个初步的开发框架实现。Rod Johnson在开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。 周甫(zoofchow@hotmail.com)
1.3 Spring的使命 • J2EE应该更加容易使用。 • 面向对象的设计比任何实现技术(比如J2EE)都重要。 • 面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。 • 代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。 • JavaBean提供了应用程序配置的最好方法。 • 在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。 周甫(zoofchow@hotmail.com)
1.4 Spring受到的批判 • Spring不是一个“标准”. • Spring不是J2EE规范的一部分,没有通过JCP(Java Community Process)的审核认可。 批判来源于EJB的支持者,他们认为EJB是一个标准,是J2EE规范的一部分。当然,标准最主要的目的是希望在应用服务器之间是可移植的,可是EJB的移植却并不轻松,不同应用服务器的ejb部署描述文件总是有着差异。而且EJB开发的类完全依赖于EJB容器。而Spring对其管理的Bean没有任何形式的侵入,这样的Bean是普通Java对象(POJO),那么它就遵循Java标准,可以到处移植。 • Spring是“超重量级”的. Spring涉及的内容确实很多(例如:提供了对jdbc、ORM、远程访问等等的支持),但其本质还是Java技术的庞大。Spring只是为了这些技术提供更好的使用方案而已。当然,开发者可以只选取需要使用的部分. 周甫(zoofchow@hotmail.com)
1.5 Spring 体系 Spring框架由七个定义明确的模块组成: 周甫(zoofchow@hotmail.com)
1.5.1 体系介绍 • 如果作为一个整体,Spring 7个模块为开发者提供了开发企业应用所需的一切。但开发者不必将应用完全基于Spring框架。开发者可以自由地挑选适合的模块而忽略其余的模块。 • 如图所示,所有的Spring模块都是在核心容器之上构建的。容器定义了Bean是如何创建、配置和管理的——更多的Spring细节。当开发者配置应用时,会潜在地使用这些类。但是作为一名开发者,最可能对影响容器所提供的服务的其它模块感兴趣。这些模块将会为开发者提供用于构建应用服务的框架,例如AOP和持久性。 周甫(zoofchow@hotmail.com)
1.5.2 核心容器 • 这是Spring框架最基础的部分,它提供了依赖注入(Dependency Injection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。 周甫(zoofchow@hotmail.com)
1.5.3 应用上下文(Context)模块 • 核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。 • 另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。 周甫(zoofchow@hotmail.com)
1.5.4 Spring的AOP模块 • Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性, Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点http://aopalliance.sourceforge.net,可以找到关于AOP联盟的更多内容。 • Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,可以为源代码增加注释,指示Spring在何处以及如何应用切面函数。 周甫(zoofchow@hotmail.com)
1.5.5 JDBC抽象和DAO模块 • 使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此可以保持数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。 • 这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使开发者不用再试图破译神秘的私有的SQL错误消息! • 另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。 周甫(zoofchow@hotmail.com)
1.5.6 对象/关系映射集成模块 • 对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。 周甫(zoofchow@hotmail.com)
1.5.7 Spring的Web模块 • Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。 周甫(zoofchow@hotmail.com)
1.5.8 Spring的MVC框架 • Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。 • 它允许声明性地将请求参数绑定到业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。 周甫(zoofchow@hotmail.com)
1.5.9 Spring 层次 周甫(zoofchow@hotmail.com)
1.5.10 总结 • Spring带来了复杂的J2EE开发的春天。它的核心是轻量级的IoC容器,它的目标是为J2EE应用提供了全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替,Spring希望为企业应用提供一站式(one-stop shop)的解决方案。 周甫(zoofchow@hotmail.com)
2 快速入门 • 例子描述: • 用一个类实现一个接口,完成输出“HELLO 某某”的功能 周甫(zoofchow@hotmail.com)
2.1 配置Spring • 请在Eclipse新建一个j2se project • 使用MyEclipse导入Spring 1.2 core lib. 配置好得项目看起来 如右图 : 其中: • com.demo.impl 放置spring bean class • com.demo.test 测试类 • applicationContext.xml spring bean 配置文件 周甫(zoofchow@hotmail.com)
2.2 Spring Bean: HelloBean publicclass HelloBean { private String helloWorld; public String getHelloWorld() { return helloWorld; } publicvoid setHelloWorld(String helloWorld) { this.helloWorld = helloWorld; } } 周甫(zoofchow@hotmail.com)
2.3 applicationContext.xml <beans> <bean id="hellobean" class="com.demo.impl.HelloBean"> <property name="helloWorld"> <value>你好</value> </property> </bean> </beans> 周甫(zoofchow@hotmail.com)
2.4 测试:ApplicationContext publicstaticvoid main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloBean hello = (HelloBean)ac.getBean("hellobean"); System.out.println(hello.getHelloWorld()); } 周甫(zoofchow@hotmail.com)
2.4 测试:BeanFactory publicstaticvoid main(String[] args) { Resource rs = new ClassPathResource("applicationContext.xml"); BeanFactory factory = new XmlBeanFactory(rs); HelloBean hello2 = (HelloBean)factory.getBean("hellobean"); System.out.println(hello2.getHelloWorld()); } 周甫(zoofchow@hotmail.com)
优势 • 所有程序代码中,除了测试类之外,并没有出现Spring中的任何组件 • HelloBean的helloWorld属性由Spring通过读取配置文件(applicationContext.xml)动态设置 • 如果HelloBean改用接口来编程,那么实现类的具体名称都不需要. 周甫(zoofchow@hotmail.com)
对开发的帮助 • 组件并不需要实现框架指定的接口,因此可以轻松的将组件从Spring中脱离 • 组件间的依赖关系减少,极大改善了代码的可重用性 周甫(zoofchow@hotmail.com)
BeanFactory与ApplicationContext • BeanFactory负责读取spring bean配置文件,管理对象的载入、生成、对象之间的关系维护,负责 bean的生命周期. • 对于简单的应用程序来说,Beanfactory已经足够. 但如果要用到Spring在框架中的一些功能及高级特性,则使用ApplicationContext,BeanFactory主要用于一些受限设备 ,如移动设备等. 周甫(zoofchow@hotmail.com)
配置文件读取方式 • Rod Johnson建议使用ApplicationContext. • 读取配置文件的方式有常用的三种: • FileSystemXmlApplicationContext 配置文件必须位于项目根目录中,示例中如:e:\workspace\spring-demo-j2se下,与src平级. • ClassPathXmlApplicationContext 配置文件在classpath中,也就是在src下 • XmlWebApplicationContext 在Web应用程序的文档结构中读取 周甫(zoofchow@hotmail.com)