您好,欢迎访问三七文档
SSH开源框架Spring笔记授课教师:孙帅2013-11-26目录CONTENTS第一章:Spring工厂创建对象简单对象(构造方法)复杂对象(没有构造方法)一引言:三个框架解决的概述Struts2框架:MVC的控制器框架,核心是ActionHibernate框架ORM框架,主要处在DAO层次.完成数据库的增删改查.Spring框架:轻量级JavaEE解决方案.不仅仅出现在控制层和DAO层.Spring会出现在JavaEE分层开发的每一个层次,提供解决方案,简化程序员的开发.JavaEE分层开发存在的问题分层Action(Struts2的产物)作用:收集数据调用Service流程跳转模拟Action测试类main函数Service(控制事务)DAO存在的典型问题:耦合问题:在编码对过程中,把接口的实现类写死在代码中,不利于后期对实现类的替换,会降低系统的可维护性.解决:解耦合.通过设计模式去解耦合.GOF4人帮经典设计模式4人帮:面向对象对象的四个牛人23种设计模式,解决代码中存在的问题.struts2中的xwork基于23种模式中的命令者模式单例模式构造方法私有适配模式从继承Servlet向继承HttpServlet的转换装饰模式过滤流包装就是一种装饰模式工厂模式最大的好处:解耦合概念:通过工厂类,创建对象,生成对象,从而解耦合.核心:工厂类习惯:默认以Factory结尾上述代码中的缺陷:通过反射创建出的对象的类全限定名做为字符串被写死在类代码中.如果需要再将全限定名从代码中抽取出来,可以将这个字符串写入配置文件,然后通过IO读取配置文件.上述代码又存在以下缺陷:需要获取一个对象,就需要在工厂中添加一个获取对象的方法.但是,获取对象的方法又如出一辙,因此就造成的大量的代码冗余.因此,需要在上述图的基础上,创建一个通用的工厂.获取返回值后,需要做类型转换.代理模式模版模式策略模式门面模式….什么是Spring框架:Spring封装了一个ApplicationContext的工厂,目的,通过Spring的工厂生产对象的,好处:解耦合二第一个Spring的程序获得Spring框架相关内容Spring框架:开源软件获取地址:早期:现在:附:开源软件盈利模式:开源使用,培训收益Spring版本:Spring1.2Spring2.0Spring2.5Spring3.x(基于JDK5.0新特性)以下内容介绍的是版本:Spring3.x(不再提供第三方jar包)搭建Spring框架的开发环境资源包内容:docAPI,及参考文档lib:jar包,基本上分三层运行需要jardocsrcscheme:存放了新技术(这个好像不准确….忘了)配置文件导入方式:MyEclipseMyEclipse可以找到该版本之前,所有开源框架的配置文件.右键newotherMyEclipseXMLbasictem…DTD(Spring选取的是Schema)selectXMLcatalogentity查找需要的配置文件内容nextfinish.如果只能导出2.5的配置文件,将xmlnsp=”..”中的p去掉,版本改成3.2可以放置在src下的任意位置.如果没有放在src根目录下,不需要指定文件的路径,可以取任意的名字.但是,约定俗成.applicationContext.xmlSpring框架核心:APIApplicationContextSpring提供的工厂类作用:创建对象好处:解耦合特点:ApplicationContext是个接口提供的两个实现类ClassPathXmlApplicationContext用于非web环境下:main,junit,用于测试WebApplicationContextweb环境下实际应用中ApplicationContext工厂,是个重量级资源要求:一个应用中,一个工厂Spring框架的作用:创建对象.Spring框架的开发步骤(三步开发)创建一个需要生产的类例:User告知Spring需要Spring创建对象的类是谁?做法:在Spring的配置文件中进行配置beanid=””class=”全限定名”id随意写,但是多个bean标签,id属性不能重复.习惯上:用类名小写API编码.通过对Spring工厂类的调用获得Spring所创建的对象,从而解耦合.例子Spring创建对象的实现原理Spring工厂会获得配置文件中的class属性所对应的全限定名,通过反射创建这个类的对象.大致参见之前的BeanFactory通过反射创建对象同样会调用对象的无参构造.如果没有无参构造,Spring同样可以帮我们解决原理总结:Spring工厂会获得配置文件中的class属性所对应的全限定名,通过反射,调用这个类的无参构造创建对象.优点:解耦合能力强缺点:效率比直接new来得低.三Spring框架对于成员变量的赋值(注入)Spring框架对于成员变量赋值(注入)概念:在Spring框架创建一个对象的同时,为它的成员变量进行赋值(注入)Spring注入的开发步骤创建对应的类,并提供set/get方法.(必须)Spring对于成员变量的赋值的分类:set方法赋值用户自建类型的成员变量赋值JDK提供类型的成员变量赋值只能通过Spring的工厂获得对应的对象.之所以能为上述的成员变量进行赋值,是因为,Spring能通过反射调用类提供的set方法对属性进行赋值.自动赋值构造方法赋值Spring对于成员变量的赋值,所需要书写的配置文件,位置:(ApplicationContext.xml)Set方法赋值对JDK提供类型的成员变量赋值8种基本类型及String类型数组类型Set集合类型:集合特点同样适用:无序,不可重复,如果配置文件中出现了重复的元素,遍历的时候,set自动过滤.List类型:与对数组的赋值,本质上是有区别的,但是形式上一样数组和List集合赋值的区别:数组只能list+valueList可以根据数据不同在list标签内加不同的标签,如valuereflocal=””Map集合Properties集合用户自建类型的成员变量赋值创建对应的类,为成员变量提供set/get方法.这里以UserDAO为例配置applicationContext.xml的配置文件.编码通过工厂获得userService对象ApplicationContextctx=newClassPathXmlApplicationContext(“”);ctx.getBean(“userService”);注意:List,Set,Map会根据存储对象的不同使用不同的标签构造方法为成员变量注入(赋值):概念:通过一个类的有参构造方法,完成对于成员变量的注入(赋值)开发步骤类,提供有参构造方法(不需要set/get方法)此时如果测试时需要观测数据,因为没有set/get可以通过覆盖toString();来完成数据的打印,从而完成对数据的观测.配置文件:测试特殊情况:如果构造方法发生重载如果参数个数不同,可以根据constructor-arg标签数量的不同来区分如果参数个数相同,变量类型不一样通过constructor-argtype=””加type区分,内填数据类型.如果参数个数不同,并且参数个数相同,变量类型还相同,则不构成重载.语法报错.注意:一个构造参数对应一个constructor-arg标签的顺序必须与构造函数中参数的顺序一致.自动赋值(自动注入)概念:通过Spring工厂自动扫描符合要求的对象为成员变量赋值.不需要再加诸如property或者constructor-arg之类的标签.开发步骤:准备类配置文件:autowire的两个可选值:byTypeString会在配置文件中自动扫描和UserServiceImpl成员变量类型相同的对象,进行赋值(注入)byNameSpring会在配置文件中自动扫描和UserServiceImpl成员变量名字相同的对象的进行赋值(注入)缺陷:程序可读性差(极差)可能存在风险,提供的bean数据类型和成员变量的数据类型不一致.几种赋值(注入)方法中,Spring建议用set赋值方法.Spring底层就是set赋值方法.实际开发中构造方法注入基本不用.但是两种方法没有优劣之分,根据习惯自选.四小技巧:添加框架所需jar包右键MyEclipseadd….前四个是否要配置文件五Spring重要概念:IOCinverseofcontrol反转控制(重点是概念,用于面试)概念:把由代码控制成员变量的赋值反转(转移)到了配置文件控制:好处:解耦合原理:Spring的工厂,即工厂设计模式DIdependencyinjection依赖注入概念:当需要一个对象时,就等同于依赖它,那么就可以把这个对象,作为成员变量,通过Spring的配置文件进行注入(赋值)例:Service完成功能时,需要依赖于DAO层。因此可以将DAO作为Service的成员变量,并采用Spring的配置文件对这个成员变量进行赋值。FactoryBean概念:通过FactoryBean创建复杂(没有构造方法)对象开发步骤(两步):实现接口:FactoryBeanpublicObjectgetObject()书写创建复杂对象的代码,并把所创建的复杂对象作为返回值返回。publicClassgetObjectType()返回所创建的复杂对象的class对象publicbooleanisSinglton()设置创建的是单例还是创建多个对象oracle.jdbc.OracleDriver这些参数同样用注入的方法设置和获取,以达到更深层次的解耦合配置文件目的:通过FactoryBean去获得复杂对象,而不是获得FactoryBean注意:如果在Spring的配置文件中,配置的class类型时FactoryBean接口的实现类,通过id获得的是她所创建的复杂对象.如果需要拿到FactoryBean对象,调用方法:getBean(“&conn”);基本不用.仅作为了解.六Spring+Hibernate整合(民间版本)搭建环境jar配置文件applicationContext.xml*.hbm.xml(映射文件)hibernate.cfg.xml预先配置struts2web.xmlFilterhibernatehibernate.cfg.xml配置参数整合思想:hibernateDAOSpring创建对象,依赖注入案例:用户注册(插入)DAO(Hibernate)ORM注册API(DAO层书写)Service(控制事务)七控制简单对象的创建次数例子:创建类配置bean…./标签内有个属性:scope两个可选值singleton只创建一个对象(默认)prototype每次创建一个对象根据工厂拿对象ctx.getBean(“u”);为什么Spring框架要控制对象的创建次数?有的对象是可以共享的,而有的对象不能共享.目的:为例减少不必要的内存损失可以共享的对象:重量级资源(SessionFactory)ServiceDAO八Spring工厂的高级特性生命周期概念:Spring工厂所创建的对象,什么时候创建,什么时候运行,什么时候销毁
本文标题:7.Spring
链接地址:https://www.777doc.com/doc-6221304 .html