课件课后练习代码-经典案例_第1页
课件课后练习代码-经典案例_第2页
课件课后练习代码-经典案例_第3页
课件课后练习代码-经典案例_第4页
课件课后练习代码-经典案例_第5页
免费预览已结束,剩余34页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaSpringSpring的基本使Spring容器对Bean组件的DI问如何构建Spring工程和Spring容器的初始化方项目结构图,如图-1所示图-新建项目拷贝Jar包到项目下(共2个spring.jar是的Jar包; 包还需要记录日志 mons-logging.jar包的支持图-修改applicationContext.xml,将各种组件(Bean)纳入到Spring的管理中<?xmlversion="1.0"encoding="UTF-""""""新建FeeDAO接口,模拟向Fee表添加和更新数据publicinterfaceFeeDAOpublicvoidpublicvoid}新建JdbcFeeDAO,模拟实现FeeDAO接口

packagepublicclassJdbcFeeDAOimplementsFeeDAO{publicJdbcFeeDAO(){System.out.println("------创建 }publicvoid System.out.println("采用JDBC方式将资费信息写入表 publicvoidSystem.out.println("采用JDBC方式将资费信息更新表 修改applicationContext.xml,实例化JdbcFeeDAOspring<?xmlversion="1.0"encoding="UTF-""""""<beanid="feeDAO" 新建测试类Test1类,使用ClassPathXmlApplicationContext初始化Spring容器,并获feeDAOpackageimportimportorg.springframework.context.support.ClassPathXmlApplicationContext;importtarena.dao.FeeDAO;publicclassTest1publicstaticvoidmain(String[]args)Stringconf"applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao=//使用}}Spring通过BeanFactory管理和配置beanSpring里,任何的java对象、java组件都被当成BeanFactory创建并负责管理Springbean的上下文的生命周期。并建立对象之间的依赖性,org.springframework.beans.factory.xml.XmlBeanFactory是BeanFactory实现类,在时,必须提供Spring容器管理bean的详细配置信息,相应的XML文件作为参运行Test1类,控制台输出结果如------创建FeeDAO采用JDBC方式将资费信息更新从控制的输出结果可以看出,实例化对象的时候调用了FeeDAO的构造方法实FeeDAO接口代码如publicinterfaceFeeDAOpublicvoidpublicvoid}隐JdbcFeeDAO类代码如下packagepublicclassJdbcFeeDAOimplementsFeeDAOpublicSystem.out.println("------创建 }publicvoidSystem.out.println("采用JDBC方式将资费信息写入}publicvoidSystem.out.println("采用JDBC方式将资费信息更新}}隐applicationContext.xml代码如下<?xml<beansencoding="UTF-""""""<beanid="feeDAO"packageimportimportorg.springframework.context.support.ClassPathXmlApplicationContext;importtarena.dao.FeeDAO;publicclassTest1publicstaticvoidmain(String[]args)Stringconf"applicationContext.xml";ApplicationContextac=new//通过spring容器获取定义的Bean对FeeDAOfeeDao=}}隐扩问Bean对象的创建时机,Bean对象的创建模式以及Bean对象初始化和销毁方使用spring01工程Bean对象的创建添加Junit的jar包。点中工程spring01右键—Properties--JavaBuildPath--Libraries,如点击AddLibrary,如图-4所示

图-选择Junit,如图-5所

图-点击Next,如图-6所

图-选择JUnit4,如图-7所示

图-图-点击Finish,在工程加入了Junit4的就jar包,如图-8图-新建Test2类,创建测试方法test1,创建Spring容器实例packageimportimportimportimportpublicclassTest2//测试对象创建时publicvoidStringconf="applicationContext.xml";ApplicationContextac=new}}点开Test2类,选中test1方--右键--RunAs--JunitTest,这样就可以运行test1方法}运行结果,控制台输出结果如图-10所示

图-图-控制台打印结果显示,默认情况下FeeDAO在Spring容器被创建时就会被创建。通过修改配置文件属性参数,可以改变Spring容器创建对象的时applicationContext.xml<beanid="feeDAO"class="tarena.dao.JdbcFeeDAO"lazy-运行test1方图-测试:当MyBean对象被调用时,MyBean修改test1方//测试对象创建时publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao=}运行test1方法图-Bean对象的创建修改Test2类,添加test2方法//测试scope属publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao1=FeeDAOfeeDao2=(FeeDAO)}运行test2方法,控制台输出结果如图-13所示图-使用单例模式有风险,风险在于多线程并发时会有一些状况修改applicationContext.xml,设置创建bean的模式为原型模式(prototype)即可以<beanid="feeDAO"class="tarena.dao.JdbcFeeDAO"lazy-init="true"scope属性的取值介

图-在web(仅限于web项目)环境中,还可以设置所创建的bean对象的生命周期和requestsessiona.request表示bean对象生命周期和request生命周期相b.session表示bean对象生命周期和session生命周期相c.globalsession当于applicationd.singleton单例模式totype原型模Bean对象的初始化和销init-method属性用于指定初始化方 packagepublicclassJdbcFeeDAOimplementsFeeDAOpublicvoidSystem.out.println("------进行init初始 publicvoidSystem.out.println("------销毁 publicSystem.out.println("------创建 publicvoidSystem.out.println("采用JDBC方式将资费信息写入 publicvoidSystem.out.println("采用JDBC方式将资费信息更新 修改applicationContext.xml,希望在bean对象创建后自动调用myinit()方<beanid="feeDAO"lazy-init="true"scope="prototype"init-publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao1=(FeeDAO)}执行test2方法,自定义的初始化的方法在对象被创建后调用,如图-15所图-<beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-修改test2方法,关闭ApplicationContext//测试scope属publicvoidStringconf=ApplicationContextacnewClassPathXmlApplicationContext(conf);FeeDAOfeeDao1=(FeeDAO)}运行test2方法,如图-16所示图-我们发现没有打印预期的“------销毁 ”的结果。原因在修改<beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-运行test2方法,控制台输出了“------销毁 ”,如图-17所示图-实Test2类代码如下packageimportimportimportimportpublicclassTest2//测试对象创建时publicvoidStringconf="applicationContext.xml";ApplicationContextac=newFeeDAOfeeDao=}//测试scope属publicvoidStringconf="applicationContext.xml";ApplicationContextac=new隐FeeDAOfeeDao1=FeeDAOfeeDao2=}}JdbcFeeDAO类代码如下packagepublicclassJdbcFeeDAOimplementsFeeDAOpublicvoidSystem.out.println("------进行init初始 }publicvoidSystem.out.println("------销毁 }publicSystem.out.println("------创建 }publicvoidSystem.out.println("采用JDBC方式将资费信息写入}publicpublicvoidSystem.out.println("采用JDBC方式将资费信息更新表}}隐<?xmlversion="1.0"encoding="UTF-""""""<beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-隐扩DI问在Spring中注入方式的应用方使用spring01工程setter方法注新建HibernateFeeDAO,模拟Hibernate实现费用的保存和更packagepublicclassHibernateFeeDAOimplementspublicvoidsave()System.out.println("采用Hibernate将资费信息写入数据表}publicvoidupdate()System.out.println("采用Hibernate将资费信息更新数据表}}FeeServiceImpl类,该类中调用FeeDAO的save方法packageimportpublicclassFeeServiceImpl//采用setter方式注入privateFeeDAOfeeDao;publicvoidsetFeeDao(FeeDAO{this.feeDao=}publicSystem.out.println("-----创建service对 }public添加");feeDao.save();}}修}}<?xmlversion="1.0"encoding="UTF-<beans <beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-<!-<beanid="feeDAO"init-destroy-method="mydestroy"lazy---<beanid="feeDAO1"<beanid="feeService"<!--定义DI依赖注入关系<propertyname="feeDao"packageimport import importpublicclass{ *测试IOC依赖注*@parampublicstaticvoidmain(String[]args)Stringconf=ApplicationContextacnew//获取容器中的FeeServiceImplservice= 运行Test3,控制台说出结果如图-18所示。调用到了HibernateFeeDAO类的savefeeDao注入值成功图-构造方式注新建FeeServiceImpl1,使用构造方法给feeDao注入值packageimportpublicclassFeeServiceImpl1//采用setter方式注入privateFeeDAOfeeDao;publicFeeServiceImpl1(FeeDAOfeeDao){this.feeDao=feeDao;}publicvoid}}修改<?xmlversion="1.0"encoding="UTF-<beans <beanid="feeDAO"lazy-init="true"init-method="myinit"destroy-<beanid="feeDAO1"<beanid="feeService"<!--定义DI依赖注入关系<propertyname="feeDao"<beanid="feeService1"<!--定义DI依赖注入关系<constructor-argindex="0"</constructor-新建packageimport import importpublicclass{ *测试IOC依赖注*@parampublicstaticvoidmain(String[]args)Stringconf=ApplicationContextacnew//获取容器中的FeeServiceImpl1service= 运行Test4,如图-19所示。调用到了HibernateFeeDAO类的save方法,给feeDao注入值功图-该如何选择使用set方式注入还是构造方式注实HibernateFeeDAO类代码如下packagepublicclassHibernateFeeDAOimplementspublicvoidsave()System.out.println("采用Hibernate将资费信息写入数据表}publicvoidupdate()System.out.println("采用Hibernate将资费信息更新数据表}}隐FeeServiceImpl类代码实现如下packageimportpublicpublicclassFeeServiceImpl//采用setter方式注入privateFeeDAOfeeDao;publicvoidsetFeeDao(FeeDAO{this.feeDao=}publicSystem.out.println("-----创建service对 }public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论