Spring手册_职业技能培训

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Spring手册上海浦东软件园·职业技能培训Spring是什么Spring是一个开源的控制反转(InversionofControl,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.IOC控制反转publicclassPersonServiceBean{privatePersonDaopersonDao=newPersonDaoBean();publicvoidsave(Personperson){personDao.save(person);}}PersonDaoBean是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。依赖注入(DependencyInjection)当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean类可以改成如下:publicclassPersonServiceBean{privatePersonDaopersonDao;//通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入。publicPersonServiceBean(PersonDaopersonDao){this.personDao=personDao;}publicvoidsave(Personperson){personDao.save(person);}}所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。为何要使用Spring至少在我看来,在项目中引入spring立即可以带来下面的好处降低组件之间的耦合度,实现软件各层之间的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。容器提供单例模式支持,开发人员不再需要自己编写实现代码。容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate。Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。ControllerServiceDAO使用Spring的好处当使用spring时,我们可以使用容器提供的众多服务如果使用Spring,我们就不再需要手工控制事务Hibernate的事务操作:publicvoidsave(){Sessionsession=sessionFactory.getCurrentSession();session.beginTransaction();Infoinfo=newInfo(传智播客);info.setContent(国内实力最强的java培训机构);session.save(info);session.getTransaction().commit();}JDBC的事务操作:Connectionconn=null;try{.......conn.setAutoCommit(false);Statementstmt=conn.createStatement();stmt.executeUpdate(updatepersonwherename='叶天');conn.commit();.....}catch(Exceptione){conn.rollback();}finally{conn.close();}另外,如果使用spring,我们也不需要处理复杂的事务传播行为publicvoidpayment(){Bean1.update();//更新金额Bean2.save();//记录操作日志}如果我们不使用Spring,针对下面这两种业务需求,我们该如何做?第1种可能的业务需求:要求Bean1.update()和Bean2.save()在同一个事务中执行。第2种可能的业务需求:要求不管Bean1.update()的事务是否成功,都需要记录操作日志。publicclassBean1{publicvoidupdate(){//注意:下面省略了一些代码Connectionconn=null;conn.setAutoCommit(false);Statement.executeUpdate(“updateaccountsetamount=?whereid=?);}}publicclassBean2{publicvoidsave(){//注意:下面省略了一些代码Connectionconn=null;conn.setAutoCommit(false);Statement.executeUpdate(“insertintoLog(content)values(?));}}使用Spring,不再需要我们处理复杂的事务传播行为使用Spring,我们只需要通过声明式的事务属性配置就可以轻松地实现这两种业务需求1.要求Bean1.update()和Bean2.save()的在同一个事务中执行2.要求不管Bean1.update()的事务是否成功,都需要记录日志。@Transactional(propagation=Propagation.Required)publicvoidpayment(){Bean1.update();//更新金额Bean2.save();//记录日志}publicclassBean1{@Transactional(propagation=Propagation.Required)publicvoidupdate(){executeUpdate(“updateaccountsetamount=?whereid=?);}}publicclassBean2{@Transactional(propagation=Propagation.RequiresNew)publicvoidsave(){executeUpdate(“insertintoLog(content)values(?));}}轻量级与重量级概念的划分经常会有同学问到spring属于轻量级框架,还是重量框架?其实划分一个应用是否属于轻量级还是重量级,主要看它使用了多少服务.使用的服务越多,容器要为普通java对象做的工作就越多,必然会影响到应用的发布时间或者是运行性能.对于spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如:只使用了spring核心服务,那么我们可以认为此时应用属于轻量级的,如果应用使用了spring提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认为应用提供了EJB规范中所有的功能,所以它属于重量级。使用Spring需要的jar到下载spring,然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下dist\spring.jarlib\jakarta-commons\commons-logging.jar如果使用了切面编程(AOP),还需要下列jar文件lib/aspectj/aspectjweaver.jar和aspectjrt.jarlib/cglib/cglib-nodep-2.1_3.jar如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,还需要下列jar文件lib\j2ee\common-annotations.jarspring的配置文件模版?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:schemaLocation=://该配置模版可以从spring的参考手册或spring的例子中得到。配置文件的取名可以任意,文件可以存放在任何目录下,但考虑到通用性,一般放在类路径下。编写spring配置文件时,不能出现帮助信息由于spring的schema文件位于网络上,如果机器不能连接到网络,那么在编写配置信息时候就无法出现提示信息,解决方法有两种:1。让机器上网,eclipse会自动从网络上下载schema文件并缓存在硬盘上。2。手动添加schema文件,方法如下:windwos-preferences-myeclipse-filesandeditors-xml-xmlcatalog点add,在出现的窗口中的KeyType中选择URI,在location中选Filesystem,然后在spring解压目录的dist/resources目录中选择spring-beans-2.5.xsd,回到设置窗口的时候不要急着关闭窗口,应把窗口中的KeyType改为Schemalocation,Key改为实例化spring容器实例化Spring容器常用的两种方式:方法一:在类路径下寻找配置文件来实例化容器ApplicationContextctx=newClassPathXmlApplicationContext(newString[]{beans.xml});方法二:在文件系统路径下寻找配置文件来实例化容器ApplicationContextctx=newFileSystemXmlApplicationContext(newString[]{“d:\\beans.xml“});Spring的配置文件可以指定多个,可以通过String数组传入。从spring容器中得到bean当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:ApplicationContextctx=newClassPathXmlApplicationContext(“beans.xml”);OrderServiceservice=(OrderService)ctx.getBean(personService);使用dom4j读取spring配置文件publicclassItcastClassPathXmlApplicationContext{privateListBeanDefinitionbeanDefines=newArrayListBeanDefinition();publicItcastApplicationContext(Stringfilename){init(filename);}privatevoidinit(Stringfilename){SAXReadersaxReader=newSAXReader();Documentdocument=null;try{URLxmlpath=this.getClass().getClassLoader().getResource(filename);document=saxReader.read(xmlpath);MapString,StringnsMap=newHashMapString,String

1 / 47
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功