首页 第四章-spring基础1

第四章-spring基础1

举报
开通vip

第四章-spring基础1 本章目标: � 什么是 Spring及其作用 � 掌握 IOC,AOP概念 � 会使用 Spring开发简单项目 1. 什么是 Spring及其作用 Spring是非常著名的框架,它主要集成两个重要技术: IOC:反转控制,AOP:面向方面编程。 在 SSH框架中 Spring主要的作用是:管理 Hibernate以及事务 2. Spring容器的作用 学习 Spring之前必须了解关于对象的产生问题。 Spring重要概念:接口的概念――》工厂设计 JAVA回顾: 对于产生一个对象 JAVA中...

第四章-spring基础1
本章目标: � 什么是 Spring及其作用 � 掌握 IOC,AOP概念 � 会使用 Spring开发简单项目 1. 什么是 Spring及其作用 Spring是非常著名的框架,它主要集成两个重要技术: IOC:反转控制,AOP:面向方面编程。 在 SSH框架中 Spring主要的作用是:管理 Hibernate以及事务 2. Spring容器的作用 学习 Spring之前必须了解关于对象的产生问题。 Spring重要概念:接口的概念――》工厂设计 JAVA回顾: 对于产生一个对象 JAVA中有哪几种常见方式?(主要考虑接口操作) � 直接用 new的方式创建对象:类 对象名 = new 类(); 接口类型 对象名称 = new 接口实现类(); 这样方式的缺点:在客户端调用时,必须要知道接口的实现类。 比如水果接口(Fruit)实现类有:苹果(Apple) 橘子(Orange) 举例:创建一个 SpringDemo 的 Web Project,在 src 中创建一个接口(Fruit)和两个实现 类:Apple,Orange,和一个测试类(SpringTest)来说明客户端和接口实现类之间的紧密耦合,具 体代码如下: packagepackagepackagepackage com.sxjiang; publicpublicpublicpublic interfaceinterfaceinterfaceinterface Fruit { //吃水果 publicpublicpublicpublic voidvoidvoidvoid eat(); } packagepackagepackagepackage com.sxjiang; publicpublicpublicpublic classclassclassclass Apple implementsimplementsimplementsimplements Fruit { publicpublicpublicpublic voidvoidvoidvoid eat() { // TODOTODOTODOTODO Auto-generated method stub System.out.println("吃苹果........"); } } packagepackagepackagepackage com.sxjiang; publicpublicpublicpublic classclassclassclass Orange implementsimplementsimplementsimplements Fruit { publicpublicpublicpublic voidvoidvoidvoid eat() { // TODOTODOTODOTODO Auto-generated method stub System.out.println("吃橘子........"); } } packagepackagepackagepackage com.sxjiang; 第四讲 Spring基础 2 publicpublicpublicpublic classclassclassclass SpingTest { public static void main(String[] args) { //产生接口的对象 Fruit f = newnewnewnew Apple(); f.eat(); } } 从上面的代码中可以看到客户端程序和 Fruit接口的实现类紧密耦合,如果不想吃苹果而要 吃橘子,必须修改客户端程序, Fruit f = newnewnewnew Orange();。。。。我们可以采取下面 工厂设计解决这个问题。 � 使用工厂设计模式,引用工厂类--�可以解决客户端和接口实现类之间的耦合,具 体代码如下: packagepackagepackagepackage com.sxjiang; publicpublicpublicpublic classclassclassclass FruitFactory { publicpublicpublicpublic staticstaticstaticstatic Fruit getFruitInstance(intintintint i) { Fruit f=nullnullnullnull; ifififif(i==1) { f= newnewnewnew Apple(); } ifififif(i==2) { f= newnewnewnew Orange(); } returnreturnreturnreturn f; } } packagepackagepackagepackage com.sxjiang; publicpublicpublicpublic classclassclassclass SpingTest { /** * @param@param@param@param args */ publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main(String[] args) { // TODOTODOTODOTODO Auto-generated method stub //产生接口的对象 Fruit f = FruitFactory.getFruitInstance(2); f.eat(); } } 通过上面的代码可以看到,在工厂模式下,通过传递参数1或2就可以改变接口实现类 的对象创建,实现了客户端和接口实现类之间的松散耦合,但此模式也存在一个问题: 一个接口就要有一个工厂,如果有100个接口就要有100工厂,工厂管理起来比较 麻烦,我们可以结合反射 机制 综治信访维稳工作机制反恐怖工作机制企业员工晋升机制公司员工晋升机制员工晋升机制图 ,控制反转,实现动态工厂来解决这一问题。 � 使用反射机制: Class.forName 结合反射机制,控制反转,实现动态工厂,工厂通过 xml进行配置。但此模式代码量非 常大,因此掌握起来也比较难度。 � 使用对象克隆,Object类中的 clone方法(不考虑) 前三种方法都有缺点,这也正式 Spring框架的提出,使用 Spring可以解决所有问题。 Spring是一个容器,实现动态工厂的容器,是一个开源框架。 举例:修改上面的项目,使用 Spring来创建对象。 1) 在项目中添加 Spring支持包,及创建配置文件 applicationContext.xml 右键项目名称�点击菜单 MyEclipse�Add Spring Capabilites…,将出现 Spring 向导,用于添加 Spring需要的类库和配置文件。 点击“Next”,添加 Spring的配置文件。 添加Spring类库集合 选择Spring版本 选中的类库将会添加到项目的构造路径中,但是相应的JAR文件不会 复制到项目中.这些JAR文件将会在发布程序时复制。添加Spring库 选中的类库JAR文件将会被复制到项目并添加到构造路径中 第四讲 Spring基础 4 2) 编写配置文件 applicationContext.xml Spring和 Hibernate一样,需要一个统一的配置文件 applicationContext.xml,此文 件为 Spring核心配置文件,此文件可以统一进行 bean的管理,此处的 bean实际 上就是对象的定义 Apple,Orange是接口 Fruit 的实现类,客户端要创建,Apple对象的话只需要找 到此处配置的 id名称即可,如果要创建Orange对象的话,只需要修改此处的 class 为 com.sxjiang.Orange而不用修改客户端代码,从而实现了客户端和接口类之间 的松散耦合。 问题:如何在 Spring中通过一定方法创建 Fruit对象呢? 方法:使用 ApplicationContext接口,通过方法 FileSystemXmlApplicationContextFileSystemXmlApplicationContextFileSystemXmlApplicationContextFileSystemXmlApplicationContext 进行查找。 结论: Spring代替了工厂,所有的工厂在资源文件 applicationContext.xml中管理。 客户端只要使用固定方法找到这个文件,就可以创建对象了,见如下代码 3) 修改测试类,使用 Spring创建对象。 importimportimportimport org.springframework.context.support.FileSystemXmlApplicationContext; publicpublicpublicpublic classclassclassclass SpingTest { /** * @param@param@param@param args */ publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main(String[] args) { ApplicationContext context=nullnullnullnull; context=newnewnewnew FileSystemXmlApplicationContext("src/applicationContext.xml"); Fruit ft = (Fruit) context.getBean("fru"); ft.eat(); } } 说明:对于开发Web Project 来说,可以在 web.xml中配置一个监听器自动加载 applicationContext.xml 方法如下: 实例:将 Struts2和 Spring结合完成一个登录功能的程序 要求:用户在登录页面输入正确的用户名和密码,则跳转到欢迎页面,反之进入失败页面。 步骤: 1) 创建Web Project :struts_spring 2) 添加 Struts2框架 � 将 struts2-core-2.0.11.jar、xwork-2.0.4.jar、commons-logging.jar、 ognl-2.6.11.jar、freemarker-2.3.8.jar共 5个 jar文件复制到项目的 WEB-INF/lib目录下,并导入到项目中(不清楚的同学请查看下 Struts2 入门章节中的内容) � 修改Web.xml struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* index.jsp 3) 创建 login.jsp <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> My JSP 'login.jsp' starting page
第四讲 Spring基础 6 用户名:
密码:
4) 创建 LoginAction packagepackagepackagepackage com.sxjiang; importimportimportimport com.opensymphony.xwork2.ActionSupport; publicpublicpublicpublic classclassclassclass LoginAction extendsextendsextendsextends ActionSupport { privateprivateprivateprivate String username; privateprivateprivateprivate String password; publicpublicpublicpublic String execute() throwsthrowsthrowsthrows Exception { returnreturnreturnreturn "success"; } publicpublicpublicpublic String getUsername() { returnreturnreturnreturn username; } publicpublicpublicpublic voidvoidvoidvoid setUsername(String username) { thisthisthisthis.username = username; } publicpublicpublicpublic String getPassword() { returnreturnreturnreturn password; } publicpublicpublicpublic voidvoidvoidvoid setPassword(String password) { thisthisthisthis.password = password; } } 5) 编写 struts.xml文件,配置 Action,此文件项目中没有,可以从别处拷贝过来 进行修改。 /welcome.jsp /error.jsp 6) 创建 welcome.jsp,error.jsp <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> My JSP 'welcome.jsp' starting page 欢迎 光临本站 -------------------error.jsp----------------------------------------- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> My JSP 'welcome.jsp' starting page 是非法 用户 7) 部署,测试 struts2是否正常运行。 http://localhost:8080/struts_spring/login.jsp 8) 添加 Spring框架(参见上面的讲解) 9) 添加 Spring支持包 10) 修改 web.xml,使得程序支持 Spring struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* org.springframework.web.context.ContextLoaderListe ner contextConfigLocation /WEB-INF/classes/applicationContext.xml index.jsp 11) 创建 struts.properties文件,使得 Struts2的类的生成交给 Spring来完成 第四讲 Spring基础 8 struts.objectFactory = spring 12) 修改 applicationContext.xml,定义名为 login 的 bean 13) 修改 struts.xml,使得 struts2的类的生成交给 Spring来完成 总结:到目前已经学习了 Struts2,Hibernate,Spring三种 J2EE框架,现在我们将三 种框架集成,开发一个用户登录的程序,如果登录成功,则进入欢迎页面,否则 进入失败页面。 步骤: 1) 创建数据库表,此处我们已经在 Hibernate 学习中创建过了。 2) 创建Web Project :ssh2 3) 用户自定义包 此处因为需要用到 Struts2,Hibernate,Spring框架的多个包,而且版本不一样的 话可能造成包冲突,不兼容问题,所以,我们将所有用到的包(不冲突)放在一 起,用的时候一起加载就可以了,非常方便。 � 用户自己定义包,方法: 选择 windows� preference� Java� Build Path�User libraries 选择 new 点击 ok 选择 ssh2然后点击 add Jars 将所有用到的包加载进来 第四讲 Spring基础 10 4) 加载 Spring框架,创建 applicationContext.xml 右键项目名称�MyEclipse�Add Spring Capabilites 单击”Next” 创建 applicationContext.xml 选择用户自定义包 5) 加载 Hibernate 框架 右击项目名称,选择MyEclipse�Add Hibernate Capabilites… 第四讲 Spring基础 12 注意:选择 Uer Libraries 在 applicationContext.xml中配置数据库信息,这样的话,就不需要创建 hibernate.cfg.xml文件了。 点击”next” 指定数据库的连接信息。 第四讲 Spring基础 14 此处不用再创建 sessionFactory类了。 6) 修改 web.xml文件,使程序支持 struts2,Spring struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* org.springframework.web.context.ContextLoaderList ener contextConfigLocation /WEB-INF/classes/applicationContext.xml index.jsp 7) 创建 struts.properties文件 struts.objectFactory = spring 8) 创建 POJO类,及 hbm..xml文件 先创建 com.sxjiang.pojo包用来存放 POJO类。 打开 MyEclipse Database Explorer视图,打开前面创建的 Sql Server数据连接,然 后选择 student表,右键,选择菜单 Hibernate Reverse Engineering… 9) 创建 login.jsp,welcome.jsp,error.jsp Login.jsp <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> My JSP 'login.jsp' starting page
用户名:
密码:
选择映射文件,POJO文件所存放的文件夹及包 生成表对应的 POJO类 是否生成三层结构,此处不生成 第四讲 Spring基础 16 Welcome.jsp <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> My JSP 'welcome.jsp' starting page 欢迎 光临本站 Error.jsp <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> My JSP 'welcome.jsp' starting page 是非法 用户 10) 创建 LoginAction packagepackagepackagepackage com.sxjiang; importimportimportimport java.util.List; importimportimportimport org.hibernate.Query; importimportimportimport org.hibernate.Session; importimportimportimport org.hibernate.SessionFactory; importimportimportimport com.opensymphony.xwork2.ActionSupport; publicpublicpublicpublic classclassclassclass LoginAction extendsextendsextendsextends ActionSupport { privateprivateprivateprivate String username; privateprivateprivateprivate String password; privateprivateprivateprivate SessionFactory sessionFactory; @Override publicpublicpublicpublic String execute() throwsthrowsthrowsthrows Exception { // TODOTODOTODOTODO Auto-generated method stub Session session = sessionFactory.openSession(); String hql = " from Student s where s.username=? and s.password=?"; Query query = session.createQuery(hql); query.setParameter(0,username); query.setParameter(1,password); List list = query.list(); session.close(); ifififif(list.size()>0) {returnreturnreturnreturn "success";} elseelseelseelse {returnreturnreturnreturn "error";} } publicpublicpublicpublic String getUsername() { returnreturnreturnreturn username; } publicpublicpublicpublic voidvoidvoidvoid setUsername(String username) { thisthisthisthis.username = username; } publicpublicpublicpublic String getPassword() { returnreturnreturnreturn password; } publicpublicpublicpublic voidvoidvoidvoid setPassword(String password) { thisthisthisthis.password = password; } publicpublicpublicpublic SessionFactory getSessionFactory() { returnreturnreturnreturn sessionFactory; } publicpublicpublicpublic voidvoidvoidvoid setSessionFactory(SessionFactory sessionFactory) { thisthisthisthis.sessionFactory = sessionFactory; } } 11) 配置 struts.xml 12) 配置 applicationContext.xml org.hibernate.dialect.SQLServerDialect com/sxjiang/pojo/Student.hbm.xml 13) 部署测试
本文档为【第四章-spring基础1】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_183544
暂无简介~
格式:pdf
大小:757KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2012-05-31
浏览量:6