资源预览内容
第1页 / 共108页
第2页 / 共108页
第3页 / 共108页
第4页 / 共108页
第5页 / 共108页
第6页 / 共108页
第7页 / 共108页
第8页 / 共108页
第9页 / 共108页
第10页 / 共108页
亲,该文档总共108页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Spring基础与实践,www. ,SUNWAH,目的,介绍Spring两大核心技术-依赖注入(DI) 和面向切面编程(AOP)。 介绍Spring 是如何利用这两种技术来开发松散耦合的Java 应用程序。,SUNWAH,目录,SUNWAH,1.1 Spring是什么,Spring是一个基于JAVA语言、开源、轻量级的DI和AOP容器框架。 EJB的声明式编程模型确实简化了很多基础设施层面的开发,如事务和安全,但在部署文件维护和各种接口(home、remote/local接口)实现等方面变得很复杂。很多新技术包括AOP和DI为JavaBeans提供了很多EJB才拥有的强大功能。这些技术使用EJB那样的声明式编码模型来提供简单洁净Java对象(POJO)。负责轻量级POJO开发就是Spring框架。 Spring 框架是以简化J2EE 应用程序开发为特定目标而创建的。使用Spring,你可以用简单的JavaBeans来实现那些以前只有EJB才能实现的功能。,SUNWAH,Spring 具有很多功能,可以将它们归纳为几个基本部件。Spring是一个轻量级的DI和AOP容器框架。 轻量级从大小和应用开支上说Spring都算是轻量级的。整个Spring框架可以打成一个2.5MB多一点的JAR包,并且Spring的处理开支也非常小。更重要的是,Spring是非侵入式的:基于Spring开发的应用中的对象一般不依赖于Spring的类。 依赖注入Spring提供了一种松耦合的技术,称为依赖注入(DI)。使用DI,对象是被动接受依赖类而不是自己主动去找。对象不是从容器中查找它的依赖类,而是容器在实例化对象的时候主动将它的依赖类注入给它。,SUNWAH,面向切面Spring对面向切面编程提供了强大支持,通过将业务逻辑从应用服务(如监控和事务管理)中分离出来,实现了内聚开发。应用对象只做它们该做的业务逻辑,它们不负责(或关心)其它系统问题(如日志和事务支持)。 容器Spring是一个容器,因为它包含并且管理应用对象的生命周期和配置。你可以通过配置来设定你的Bean是单一实例,还是每次请求产生一个实例,并且设定它们之间的关联关系。Spring有别于传统的重量级EJB容器,这些容器通常很大,很笨重。 框架Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中,应用中的对象是通过XML文件配置组合起来的。并且Spring提供了很多基础功能(事务管理、持久层集成等),这使开发人员能够专注于开发应用逻辑。,SUNWAH,1.1.1 Spring模块,SUNWAH,核心容器 Spring的最底层是核心容器。Spring核心容器为Spring框架提供了基础功能。在这个模块中你会找到BeanFactory这个类,它是最基本的Spring容器和Spring的DI所依赖的基础。 Application Context(上下文)模块 Spring的应用上下文建立在核心容器之上。如果说核心模块中的BeanFactory使Spring成为容器的话,那么,上下文模块就是使 Spring成为框架的原因。这个模块扩展BeanFactory,添加了对I18N(国际化)、应用生命周期事件以及验证的支持。,SUNWAH,Spring的AOP模块 在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是为Spring应用开发切面的基础。与DI一样,AOP支持应用对象之间的松耦合。利用AOP,应用程序所关心的与其应用的对象关系不大。 JDBC抽象及DAO模块 编写JDBC代码时总是要写一些样板式的代码,如:获得连接、创建语句、处理结果、最后关闭连接。Spring的JDBC和DAO模块把这些样板式的代码抽象出来,让你的数据库代码变得简单明了,也可以避免因为释放数据库资源失败而引起的问题。这个模块还建立了一个容易理解的数据库异常层,它建立在各种数据库错误信息之上。以后就不用再去解释那些隐晦专有的SQL错误信息了。 另外,这个模块利用Spring的AOP模块为Spring应用中的对象提供事务管理服务。,SUNWAH,ORM映射集成模块 JMX(Java管理扩展) Java EE连接器API(JCA) Spring MVC框架 Spring Portlet MVC Spring的Web模块 远程调用 Java消息服务(JMS),SUNWAH,1.2 开始Spring之旅,Spring版Hello World示例的第一个类是一个服务类,它的作用是打印出那句熟悉的问候。 定义Greeting Service接口 package com.sunwah.training.spring.hello; /* *Greeting Service接口,它定义了我们的服务类需要提供的服务 */ public interface GreetingService /* * 打印问候语 */ public void sayGreeting(); ,SUNWAH,Hello World 程序代码,Greeting ServiceImpl负责打印问候语。 package com.sunwah.training.spring.hello; /* * Greeting ServiceImpl负责打印问候语 */ public class GreetingServiceImpl implements GreetingService / 问候语 private String greeting; public GreetingServiceImpl() ,SUNWAH,public GreetingServiceImpl(String greeting) this.greeting = greeting; /打印问候语 public void sayGreeting() System.out.println(greeting); public void setGreeting(String greeting) this.greeting = greeting; ,SUNWAH,XML配置文件, ,SUNWAH,是这个简单XML文件的根元素,它也是任何Spring配置文件的根元素。 元素用来在 Spring容器中定义一个类以及它的配置信息。这里,属性id表示greetingService Bean的名字,class属性表示Bean的全路径类名。 在元素中,元素表示设置属性值 。使用元素,我们告诉Spring容器通过调用Bean的setGreeting()方法来设置其属性值,在实例化此bean时传递“Hello World”。 使用元素 ,我们告诉Spring容器通过调用Bean的构造函数来设置其属性值,在实例化此bean时传递“Hello World”。,SUNWAH,执行Hello World 程序,package com.sunwah.training.spring.hello; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class HelloMain public static void main(String args) throws Exception BeanFactory factory = new XmlBeanFactory(new ClassPathResource( spring-hello.xml);,SUNWAH,/ 属性注入 GreetingService greetingService = (GreetingService) factory .getBean(greetingService); greetingService.sayGreeting(); / 构造注入 GreetingService greetingService2 = (GreetingService) factory .getBean(greetingService); greetingService2.sayGreeting(); ,SUNWAH,这段代码的用处就是载入Spring容器并且利用它得到问候服务。 这里用到的BeanFactory就是Spring容器。将spring-hello.xml文件载入容器后,main()方法调用BeanFactory的 getBean()方法来得到问候服务的引用。使用这个引用,它最后调用了sayGreeting()方法。当我们运行HelloMain程序时,它在屏幕 上打出“Hello World!”。,SUNWAH,2、依赖注入(DI),SUNWAH,在Spring中,组件无需自己负责与其他组件的关联。取而代之的是,容器负责把协作组件的引用给予各个组件。 创建系统组件之间协作关系的这个动作是DI的关键,通常被称之为装配。,SUNWAH,2.1 容纳你的Bean,在基于Spring的应用中,应用组件在Spring范围内是激活的。容器可以创建组件,装配和配置组件,以及管理他们的整个生命周期(从new到finalize()。 首先,要知道容器是组件存活的地方。容器是Spring框架的核心。Spring容器使用DI管理所有注册应用系统的组件。包括在协作组件之间建立关联。 Spring提供了多种容器实现,并分为两类。Bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供了基础的依赖注入支持。应用上下文(由org.springframework.context.ApplicationContext接口定义)建立在Bean工厂基础之上,提供了系统架构服务。,SUNWAH,2.1.1使用Bean工厂,Bean工厂采用了工厂设计模式,这个类负责创建、分发各种类型的Bean及创建协作对象间的关联关系。Bean工厂还要参与到Bean的生命周期中,调用用户定义的初始化和销毁方法。 org.springframework.beans.factory.xml.XmlBeanFactory是最常使用的BeanFactory的实现,它根据XML文件中的定义装载Bean。 例: BeanFactory factory = new XmlBeanFactory(new FileSystemResource(c:/beans.xml); 这段代码的意思是告诉Bean工厂从XML文件中读取Bean的定义信息。但是Bean只有在被需要的时候才被实例化。 为了从BeanFactory中得到一个Bean,只要简单调用getBean()方法。 例: MyBean myBean = (MyBean) factory.getBean(myBean); 当getBean()方法被调用的时候,工厂就会实例化Bean并且使用依赖注入设置Bean的属性。这样就在Spring容器中开始了Bean的生命。,SUNWAH,2.1.2使用应用上下文,ApplicationContext比BeanFactory提供了更多功能: 应用上下文提供了文本信息解析工具,包括对国际化(I18N)的支持。 应用上下文提供载入文件资源的通用方法。 应用上下文可以向注册为监听器的Bean发送事件。 ApplicationContext有三个经常用到的实现: ClassPathXmlApplicationContext从类路径中的XML文件载入上下文定义信息,把上下文定义文件当成类路径资源。 FileSystemXmlApplicatio
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号