您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > spring4.0讲义
Spring4框架技术课程讲义北京动力节点教育培训公司制作人:老郭2015年10月2Spring4讲义第1章Spring简介Spring是于2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。----百度百科《Spring》Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。----百度百科《Spring框架》一、Spring体系结构Spring由20多个模块组成,它们可以分为数据访问/集成(DataAccess/Integration)、Web、面向切面编程(AOP,Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messaging)、核心容器(CoreContainer)和测试(Test)。3二、Spring的下载Spring官网:三、Spring4框架解压目录及Jar包说明四、Spring的特点1、非侵入式所谓非侵入式是指,Spring框架的API不会在业务逻辑上出现,即业务逻辑是POJO(PlainOldJavaObjects)。由于业务逻辑中没有Spring的API,所以业务逻辑可以从Spring框架快速的移植到其他框架,即与环境无关。52、容器Spring作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过配置文件,来定义对象,以及设置与其他对象的依赖关系。3、IoC控制反转(InversionofControl),即创建被调用者的实例不是由调用者完成,而是由Spring容器完成,并注入调用者。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。4、AOP面向切面编程(AOP,AspectOrientProgramming),是一种编程思想,是面向对象编程OOP的补充。很多框架都实现了对AOP编程思想的实现。Spring也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。我们可以把日志、安全、事务管理等服务理解成一个“切面”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好:首先业务逻辑不纯净;其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。那么AOP就是这些问题的解决方案,可以把这些服务剥离出来形成一个“切面”,以期复用,然后将“切面”动态的“织入”到业务逻辑中,让业务逻辑能够享受到此“切面”的服务。6第2章Spring与IoC控制反转(IOC,InversionofControl),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。但是,需要注意,IoC也是有局限性的,其不能使用在分布式系统中。即其所依赖的反转到的外部容器,必须要与控制权出让方同处于一个JVM中。IoC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种:依赖注入和依赖查找。依赖注入方式应用更为广泛。依赖查找:DependencyLookup,DL,容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于JNDI系统的查找。依赖注入:DependencyInjection,DI,程序代码不做定位查询,这些工作由容器自行完成。依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。Spring的依赖注入对调用者与被调用者几乎没有任何要求,完全支持POJO之间依赖关系的管理。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。一、SpringDI的引入1、SpringDI的底层实现原理SpringDI=工厂+反射+配置文件传统开发中的面向抽象编程,调用者与接口实现类是紧密耦合在一起的。若实现类发生改变,则必须修改原有代码:在调用者类中将实现类进行更换。但,这不符合软件开发的OCP原则(OCP,Open-ClosePrinciple)。OCP原则,即开闭原则,指软件实体(类、模块、功能等)应该可以被扩展,但不可被修改。即对功能扩展是开放的,对已有代码修改是关闭的。也就是说,应该在不修改现有代码的基础上,扩展新功能。若要使调用者类与接口实现类之间实现解耦,可使用工厂模式。但,这又使调用者与工厂耦合,工厂与接口实现类耦合。实现类的更换,不需要修改调用者类,但需要修改工厂,即代码仍需重新编译。此时,可以通过在工厂类中使用“反射+配置文件”的方式来加载接口实现类。而这就是Spring的IoC的工作原理。2、普通三层架构编程举例:common7Step1:创建一个JavaProjectStep2:创建Service层接口IStudentServiceStep3:创建接口实现类StudentServiceImplStep4:创建Dao层接口IStudentDaoStep5:创建接口实现类StudentDaoImplStep6:编写测试类MyTest3、工厂模式编程举例:factoryStep1:复制common项目,更名为factoryStep2:创建工厂类ServiceFactory与DaoFactoryStep3:修改MyTest中Service的获取方式Step4:修改StdentServiceImpl中Dao的获取方式4、工厂模式+反射编程举例:reflectStep1:复制factory项目,更名为reflectStep2:修改Service工厂类:使用反射创建Service实现类对象Step3:修改Dao工厂类:使用反射创建Dao实现类对象二、Spring程序开发在普通三层架构的基础上,将程序修改为Spring框架程序举例:springDemo1、导入Jar包首先,导入Spring程序开发的四个基本jar包。8其次,导入日志相关的Jar包。在以下依赖库中:spring-framework-3.0.2.RELEASE-dependencies.zip解压目录下:\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1下的com.springsource.org.apache.commons.logging-1.1.1.jar文件。该文件只是日志记录的实现规范,并没有具体的实现。相当于slf4j.jar的作用。这里日志的实现使用log4j,故还需要log4j.jar。在依赖库解压目录下:\org.apache.log4j\com.springsource.org.apache.log4j\1.2.15中的com.springsource.org.apache.log4j-1.2.15.jar最后,导入JUnit测试Jar包junit-4.9.jar。Spring基本编程,共需7个Jar包即可。2、创建Spring配置文件Spring配置文件的文件名可以随意,但Spring建议的名称为applicationContext.xml。文件约束在%SPRING_HOME%\docs\spring-framework-reference\html\xsd-configuration.html文件中。9注意,Spring配置文件中使用的约束文件为xsd文件。若Eclipse中没有自动提示功能,则需要将约束要查找的域名地址指向本地的xsd文件。相应的xsd文件在Spring框架解压目录下的schema目录的相应子目录中。这里需要的是spring-beans.xsd约束文件,故需要在beans子目录中查找相应版本的约束文件。10bean/:用于定义一个实例对象。一个实例对应一个bean元素。id:该属性是Bean实例的唯一标识,程序通过id属性访问Bean,Bean与Bean间的依赖关系也是通过id属性关联的。class:指定该Bean所属的类,注意这里只能是类,不能是接口。3、定义测试类(1)ApplicationContext接口容器ApplicationContext用于加载Spring的配置文件,在程序中充当“容器”的角色。其实现类有两个。通过Ctrl+T查看:A、配置文件在类路径下若Spring配置文件存放在项目的类路径下,则使用ClassPathXmlApplicationContext实现类进行加载。11B、配置文件在本地目录中若Spring配置文件存放在本地磁盘目录中,则使用FileSystemXmlApplicationContext实现类进行加载。C、配置文件在项目根路径下若Spring配置文件存放在项目的根路径下,同样使用FileSystemXmlApplicationContext实现类进行加载。下面是存放在项目根路径下的情况,该配置文件与src目录同级,而非在src中。12(2)BeanFactory接口容器BeanFactory接口对象也可作为Spring容器出现。BeanFactory接口是ApplicationContext接口的父类。若要创建BeanFactory容器,需要使用其实现类XmlBeanFactory(Ctrl+T查看继承关系)。该类可以加载Spring配置文件。而Spring配置文件以资源Resouce的形式出现在XmlBeanFactory类的构造器参数中。Resouce是一个接口,其具有两个实现类:ClassPathResource:指定类路径下的资源文件FileSystemResource:指定项目根路径或本地磁盘路径下的资源文件。在创建了BeanFactory容器后,便可使用其重载的getBean()方法,从容器中获取指定的Bean对象。13(3)两个接口容器的区别虽然这两个接口容器所要加载的Spring配置文件是同一个文件,但在代码中的这两个容器对象却不是同一个对象,即不是同一个容器:它们对于容器内对象的装配(创建)时机是不同的。装配时机测试时需要注意,首先要在容器中对象StudentServiceImpl类的无参构造器中添加一个输出语句,以显示其是否执行。A、ApplicationContext容器中对象的装配时机ApplicationContext容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占14用内存。B、BeanFactory容器中对象的装配时机BeanFactory容器,对容器中对象的装配与加载采用延迟加载策略,即在第一次调用getBean()时,才真正装配该对象。三、Bean的装配举例:beanAssemble项目Bean的装配,即Bean对象的创建。容器根据代码要求创建Bean对象后再传递给代码的过程,称为Bean的装配。1、默认装配方式代码通过getBean()方式从容器获取指定的Bean实例,容器首先会调用Bean类的无参构造器,创建空值的实例对象。举例:ba01包152、动态工厂Bean有些时候,项目中需要通过工厂类来创建Bean实例,而不能像前面例子中似的,直接由Spring容器来装配Bean实例。使用工厂模式创建Bean实例,就会使工厂类与要创建的Bean类耦合到一起。(1)将动态工厂Bean作为普通Bean使用将动态工厂Bean作为普通Bean来
本文标题:spring4.0讲义
链接地址:https://www.777doc.com/doc-4353738 .html