学习Spring.docx

上传人:b****4 文档编号:5315049 上传时间:2023-05-08 格式:DOCX 页数:12 大小:25.57KB
下载 相关 举报
学习Spring.docx_第1页
第1页 / 共12页
学习Spring.docx_第2页
第2页 / 共12页
学习Spring.docx_第3页
第3页 / 共12页
学习Spring.docx_第4页
第4页 / 共12页
学习Spring.docx_第5页
第5页 / 共12页
学习Spring.docx_第6页
第6页 / 共12页
学习Spring.docx_第7页
第7页 / 共12页
学习Spring.docx_第8页
第8页 / 共12页
学习Spring.docx_第9页
第9页 / 共12页
学习Spring.docx_第10页
第10页 / 共12页
学习Spring.docx_第11页
第11页 / 共12页
学习Spring.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

学习Spring.docx

《学习Spring.docx》由会员分享,可在线阅读,更多相关《学习Spring.docx(12页珍藏版)》请在冰点文库上搜索。

学习Spring.docx

学习Spring

Spring框架学习文档

一、基于B/S的典型三层架构

展现层

业务逻辑层

持久化层

WebWork/Struts

Spring

Hibernate

Action,FormBean,配置档,模版页面

IOC容器AOP,hibernate的支持,事物管理

映射档,Hibernate界面,DAO模式

2、问题的提出

例子:

你做了一个网站,其中要用到一些业务逻辑;登录(返回boolean),注册(返回boolean),查询(返回HashSet)。

这个模块经常被改变,或者为不同的业务服务而切换,你怎么样在Action里面调用这个模块?

——new一个对象

方案1:

将所有可能出现的切换情况都拷贝到Action目录下。

方案2:

面向界面编程,并且用到工厂。

Spring的作用:

管理业务逻辑——IOC

1.这种思想可以很好的实现同类不同质的模块切换。

2.开发具备属性的程序。

3.可以方便的通过配置档改变模块行为,动态注入属性值。

4.模块组装

注意:

只关注配置档的修改,不需要知道他具体的调用实现

三、关于Bean标签:

1.Bean的初始化函数和消亡函数

这些函数会自动调用

2.Bean的构造函数注入(不要参数的名字,但要类型)

123

456

注意:

这个功能可以充分让IDE给我们做.

3.Bean的singleton(单态)

singleton="true">

注意:

构造函数和初始化函数只调用一次,

4.Bean的延迟加载

延迟加载(lazy-init)只对于单态的bean,非单态的bean,本来就是"延迟加载"。

写了三个例子:

1.spring_demo_1:

是简单的spring测试

2.spring_demo_2:

是对spring的优化写法

3.spring_bean_tag:

对Bean标签的练习

 

4、Spring与Struts的整合

1.场景:

Struts登陆,调用Dao,要求Dao内能够显示登陆信息。

2.整合问题1:

在web工程下,使用ApplicationContextcontext=newFileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml");这样读取配置文件是错的。

解决方法:

在web.xml中配置:

contextorg.springframework.web.context.ContextLoaderServlet

1

这样就会自动读取/WebRoot/WEB-INF/applicationContext.xml,如果自定义文件名,则还需要增加:

contextConfigLocation

/文件路径

通过WebApplicationContextUtils.getWebApplicationContext(application);得到Bean

另一种方法:

用Listener接口(Servlet2.3以上的版本使用)

1.建立一个WEB项目,在web.xml中加入

contextConfigLocation

/文件路径

org.springframework.web.context.ContextLoaderListener

通过WebApplicationContextUtils.getWebApplicationContext(application);得到Bean

补充:

在spring框架中,也有一个专门为struts服务的action,这个类是ActionSupport。

它继承Action,它有lookupDispatchActionSupport等子类。

详细看spring的API。

2.使用ActionSupport后,就不需要WebApplicationContextUtils.getWebApplicationContext(application),需要得到WebApplicationContext用这个ActionSupport。

3.struts的优化写法,将strut中action改写,并在spring中配置文件中配置就可以

第一种方式:

--将dao装配置DaoCaller内-->——全权委托(最常用的方法)

--这个dao是DaoCaller中的属性名-->

--这个最上面代表那个处理逻辑的daotest-->

第二种方式:

将Action的生成在这里截取掉,命令其在Spring框架中生成

1.让Struts框架认识Spring框架配置文件,配置插件

2.用org.springframework.web.struts.DelegatingActionProxy类来截获Action的生成.代替struts中的type值。

在struts配置文件中添加插件

property="contextConfigLocation"/>

第三种方式:

修改spring配置文件:

——常用

bean的name和struts配置文件中action的path相同,将action完全交给spring去做

注意:

这时就不能使用action的ActionSupport类,而使用Action类。

Web.xml里面也不需要像前面二种一样,无需注册spring框架一些配置,。

Action的默认是单态的,我们可以改变他的状态singleton="false"。

增强action的灵活性。

 

还有第四种整合方式:

不常用

配置RequestProcessor来截获,type还是用配置action类,但是在struts-config.xml加入:

 

5、Spring与数据库层的整合

场景:

编写一个dao传人一个姓名的模糊资料,能够返回该姓名所对应的所有学生资料(struts完成)。

步骤:

1.建立一个学生信息类(Student.java)

2.增加struts框架支持,建立处理学生信息的Action,Actionform和相关页面

 

3.建立一个接口类:

一查询学生信息的集合的方法

PublicArrayListqueryStuByName(Stringsname);

4.创建一个StudentDao实现接口类,里面有三个方法(

连接数据库的方法,实现接口的方法,关闭连接的方法)

5.增加spring支持,配置相关信息,将接口类型注入Action中,修改struts配置文件的action中的type值(org.springframework.web.struts.DelegatingActionProxy)截获,添加插件:

property="contextConfigLocation"/>

一:

Spring和JDBC整合:

1.在Spring里面我们可以配置数据源,相当于封装了数据库连接的基本信息并且进行了优化。

使用这种方式需要导入mons.dbcp.BasicDataSource包,可以通过MyEclipse中导入!

步骤:

1、在applicationContext.xml中新建一个DataSource数据源,

2.在StudentDao中添加privateDataSourcedataSource;属性,并且在

注入。

StudentDao直接使用DataSource.getConnection();在这样就得到了conn连接;

注意;这样做完后感觉还是要初始化数据库连接,优化写法采用——提供了模版(Template)来简化数据库操作。

使用jdbcTemplate,改进前面的代码:

1.在原来的StudentDao中Connectionconn可以不要了,直接实用化DataSourcedataSource,如下:

传人dataSource

JdbcTemplatejt=newJdbcTemplate(dataSource);

ListstuList=jt.queryForList(sql);

Jt的很多相关操作,详细参考api;

注意:

这样的话stuList里面放的是什么?

每一个学生都是一个元素,放入HashMap,List内存的是HashMap,所以改变在前端显示的时候,需要取出列和值。

iteratorid="stuBean"name="stuList">

iteratorid="stu"name="stuBean">

writename="stu"property="valus"/>

iterator>

iterator>

2.还有一种方法更加改进代码的难度:

使用JdbcDaoSupport类,里面有二个方法得到模版(getJdbcTemplate)和getDataSource和setDataSource的方法,改进代码,在StudentDao继承JdbcDaoSupport类,就不需要数据源属性DataSourcedataSource,直接在使用;

JdbcTemplatejt=this.getJdbcTemplate();

ListstuList=jt.queryForList(sql);

 

二:

Spring和hibernate整合:

1.加载hibernate框架支持,进行相应的设置,为Student类描述一个映射文件。

2.有了hibernate框架后,原来的属性

就不需要了,数据源的配置

class="mons.dbcp.BasicDataSource">

value="org.apache.derby.jdbc.ClientDriver">

value="jdbc:

derby:

//localhost:

1527/myeclipse">

也不需要了,因为hibernate中带有数据源的配置。

3.在applicationContext.xml点击右键新建HibernateSessionFactory。

会有三个值需要设置,由于名字可以自己随便起,数据源的id,数据库的方言,都是通过hibernate所以不用写,只需要让spring框架认识hibernate框架就行,找到hibernate.cfg.xml加载配置。

4.在StudentDao中创建

privateSessionFactorysessionFactory;增加get和set函数,并且装配到applicationContext.xml中

在StudentDao中则改为

privateSessionFactorysessionFactory;

publicListqueryStuByName3(Stringsname){

Stringhql="fromStudentwherestuNamelike'%"+sname+"%'";

HibernateTemplateht=newHibernateTemplate(sessionFactory);

ListsList=ht.find(hql);

returnsList;

}

publicSessionFactorygetSessionFactory(){

returnsessionFactory;

}

publicvoidsetSessionFactory(SessionFactorysessionFactory){

this.sessionFactory=sessionFactory;

}

 

5.前端显示要做一些修改:

iteratorid="stu"name="sList">

writename="stu"proerity="stuId"/>

writename="stu"proerity="stuName"/>

writename="stu"proerity="stuAdd"/>

writename="stu"proerity="stuBir"/>

iterator>

注意;这种方法的完成其实就是把hibernate的配置文件注入到spring框架中使其认识,有hibernate生成数据源一些信息,再通过spring生成SessionFactory,就可以对数据库进行相关操作.

6.其实还可以对这种方法进行修改

1.在StudentDao中继承HinernateDaoSupport类,在这个类通过一些get方法得到想要的方法。

2.对上面中的属性sessionFactory可以进行省略,通过getSessionFactory得到工厂,

publicListqueryStuByName3(Stringsname){

Stringhql="fromStudentwherestuNamelike'%"+sname+"%'";

HibernateTemplateht=this.getHibernateTemplate();

ListsList=ht.find(hql);

returnsList;

}

这就是对上面与hibernate整合框架的一些简单优化。

剩下的问题:

如何在spring配置文件中配置对数据库操作的事物?

写一个完整的例子:

struts、spring、hibernate框架结合

模拟一个银行系统:

1.建立一个表:

T_CUSTOMER(ACCOUNT,PASSWORD,CNAME,CBALANCE)

2.Login.jsp:

输入帐号密码,提交,如果成功,则跳转到达操作页面register.jsp:

输入账号,密码,确认密码,姓名,提交,可以注册,余额初始为0,

3.Ope.jsp:

操作页面,上面显示欢迎xxx来到银行,你的余额是?

?

,底部有三个链接,存款,取款,退出。

4.Cunkuan,jsp:

表单输入一个数字,能够将余额增加这个数字,存款成功,自动跳转到ope.jsp。

5.Qukuan.jsp:

表单输入一个数字,能够将余额减少这个数字,取款成功,自动跳转,自动跳转到ope.jsp,如果不够取,显示:

取款失败,

6.要求在页面上有一些错误提示。

 

步骤:

1、用struts框架把上面的写做了(action.jsp,form),自动生成完成

2、导入spring框架对业务逻辑进行管理,使其自动注入,在注入之前要使sturts的配置文件认识到spring的配置文件(通过插件,修改action的type值),把请求代理截获,并在spring中配置文件进行注入。

3、导入hibernate框架改进代码量,先在spring配置文件中认识hinernate的配置文件,点击右键生成HibernateSessionFactory,并注入到DAO中,

4、在DAO中继承HinernateDaoSupport类,使用其sessionFactory属性,然后得到HibernateTemplate模版,

三个框架之间组建的之间的关系!

——项目实施安排:

1、提取项目需求中所有的用例(动作)

2、将用例按照实体(静态的内容)分类,将每个用例的详细信息描述出来。

3、根据实体大致可以设计数据库:

实体表,关系表

一般使用的方法

4、原则上,一个用例就是一个Action,有表单就有设计ActionForm,Jsp根据实际情况设计

5、适当情况下,考虑使用DispatchAaction来减少模块个数。

6、设计公用模块(公用类,自定义标签)

7、原则上,根据第2步的分类,建立Dao,所以Dao前面名字一般都是名词,适当设计po类来支持Dao

8、设计一些辅助的工具,如果过滤器,插件等等

注意技巧:

模块尽量降低耦合性,分工后尽量减少代码模块之间在开发时的影响。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2