[IT认证]spring简介_第1页
[IT认证]spring简介_第2页
[IT认证]spring简介_第3页
[IT认证]spring简介_第4页
[IT认证]spring简介_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、springspringspring是什么 spring是一个开源的控制反转(inversion of control ,ioc)和面向切面(aop)的容器框架.它的主要目得是简化企业开发.ioc 控制反转public class personservicebean private persondao persondao = new persondaobean(); public void save(person person) persondao.save(person); persondaobean 是在应用内部应用内部创建及维护的。所谓控制反转就是应用本身应用本身不负责不负责依赖对象的创

2、建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。依赖注入(dependency injection)当我们把依赖对象交给外部容器负责创建,那么personservicebean 类可以改成如下:public class personservicebean private persondao persondao ; /通过构造器参数,让容器把创建好的依赖对象注入进personservicebean,当然也可以使用setter方法进行注入。 public personservicebean(persondao persondao) t

3、his.persondao=persondao; public void save(person person) persondao.save(person); 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。在项目中引入在项目中引入spring立即可以带来下面的好处立即可以带来下面的好处l降低组件之间的耦合度,实现软件各层之间l 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。l容器提供单例模式支持,开发人员不再需要自己编写实现代码。l容器提供了aop技术,利用它很容易实现如

4、权限拦截、运行期监控等功能。l容器提供的众多辅作类,使用这些类能够加快应用的开发,如: jdbctemplate、 hibernatetemplate。lspring对于主流的应用框架提供了集成支持,如:集成hibernate、jpa、struts等,这样更便于应用的开发。使用spring的好处6使用spring的好处如果使用spring, 我们就不再需要手工控制事务hibernate的事务操作: public void save()session session = sessionfactory.getcurrentsession(); session.begintransaction();

5、info info = new info(传智播客);info.setcontent(国内实力最强的java培训机构);session.save(info );session.gettransaction().commit(); jdbc的事务操作: connection conn = null; try . conn.setautocommit(false); statement stmt = conn.createstatement(); stmt.executeupdate(update person where name=叶天); mit(); . catch (exception e

6、) conn.rollback(); finallyconn.close();spring的配置文件模版.实例化spring容器实例化spring容器常用的两种方式:方法一:在类路径下寻找配置文件来实例化容器applicationcontext ctx = new classpathxmlapplicationcontext(new stringbeans.xml);方法二:在文件系统路径下寻找配置文件来实例化容器applicationcontext ctx = new filesystemxmlapplicationcontext(new string“d:beans.xml“);sprin

7、g的配置文件可以指定多个,可以通过的配置文件可以指定多个,可以通过string数组传入。数组传入。从spring容器中得到bean当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:applicationcontext ctx = new classpathxmlapplicationcontext(“beans.xml”);orderservice service = (orderservice)ctx.getbean(personserv

8、ice);三种实例化bean的方式1.使用类构造器实例化2.使用静态工厂方法实例化public class orderfactory public static orderservicebean createorder()return new orderservicebean();orderfactory.createorder()3.使用实例工厂方法实例化:public class orderfactory public orderservicebean createorder()return new orderservicebean(); bean的作用域.singleton 默认情况下是

9、单实例,只创建一次对象.prototype 每次从容器获取bean都是新的对象。 .request .session .global session注入依赖对象注入依赖对象基本类型对象注入:基本类型对象注入:/构造器注入/属性setter方法注入注入其他注入其他bean:方式一方式一/setter方法注入方式二方式二(使用内部使用内部bean,但该但该bean不能被其他不能被其他bean使用使用)集合类型的装配集合类型的装配public class orderservicebean private set sets = new hashset();private list lists = ne

10、w arraylist();private properties properties = new properties();private map maps = new hashmap(); ./这里省略属性的这里省略属性的getter和和setter方法方法集合类型的装配集合类型的装配 lihuoming set sss 依赖注入依赖注入l使用构造器注入l使用属性setter方法注入l使用field注入(用于注解方式)注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。1.手工装配依赖对象2.自动装配依赖对象依赖

11、注入依赖注入-手工装配手工装配依赖对象,在这种方式中又有两种编程方式手工装配依赖对象,在这种方式中又有两种编程方式1. 在xml配置文件中,通过在bean节点下配置,如/构造器注入/属性setter方法注入2. 在java代码中使用autowired或resource注解方式进行装配。但我们需要在xml配置文件中配置以下信息: 这个配置隐式注册了多个对注释进行解析处理的处理器:autowiredannotationbeanpostprocessor,commonannotationbeanpostprocessor,persistenceannotationbeanpostprocessor,

12、requiredannotationbeanpostprocessor 注: resource注解在spring安装目录的libj2eecommon-annotations.jar依赖注入依赖注入-手工装配在在java代码中使用代码中使用autowired或或resource注解方式进行装配,这两个注解的区别是:注解方式进行装配,这两个注解的区别是:autowired 默认默认按类型装配按类型装配,resource默认按名称装配,当找不到与名称匹配的默认按名称装配,当找不到与名称匹配的bean才会按类型装配。才会按类型装配。 autowired private persondao person

13、dao;/用于字段上 autowired public void setorderdao(orderdao orderdao) /用于属性的setter方法上 this.orderdao = orderdao; autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合qualifier注解一起使用。如下: autowired qualifier(persondaobean) private persondao persondao;resource注解和autowired一样,

14、也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。 resource(name=“persondaobean”) private persondao persondao;/用于字段上注意:如果没有指定注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时,属性,并且按照默认的名称仍然找不到依赖对象时, resource注解会回退注解会回退到按类

15、型装配。但一旦指定了到按类型装配。但一旦指定了name属性,就只能按名称装配了。属性,就只能按名称装配了。依赖注入依赖注入-自动装配依赖对象对于自动装配,大家了解一下就可以了,实在不推荐大家使用。例子:autowire属性取值如下:lbytype:按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的bean。如果发现多个,那么将会抛出异常。如果没有找到,即属性值为null。lbyname:按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null。lconstructor与bytype的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有

16、找到与构造器参数类型一致的bean,那么将会抛出异常。lautodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是bytype方式进行自动装配。如果发现默认的构造器,那么将使用bytype方式。通过在通过在classpathclasspath自动扫描方式把组件纳入自动扫描方式把组件纳入springspring容器中管理容器中管理前面的例子我们都是使用xml的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些这组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。spring2.5为我

17、们引入了组件自动扫描机制,他可以在类路径底下寻找标注了component、service、controller、repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件是一样的。要使用自动扫描机制,我们需要打开以下配置信息: 其中base-package为需要扫描的包(含子包)。service用于标注业务层组件、 controller用于标注控制层组件(如struts中的action)、repository用于标注数据访问组件,即dao组件。而component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 使用sp

18、ring+jdbc集成步骤如下:配置数据源,如: .略 1、无事务的整合2、有事务的整合spring+jdbc组合开发在spring配置文件中引入用于声明事务的tx命名空间配置数据源 采用注解方式配置事务采用注解方式配置事务 采用注解方式采用注解方式 service transactionaltransactionalpublic class personservicebean implements personservice 采用基于基于xmlxml方式配置事务 使用jdbctemplate进行insert/update/delete操作service transactionalpublic

19、 class personservicebean implements personservice private jdbctemplate jdbctemplate;resourcepublic void setdatasource(datasource datasource) this.jdbctemplate = new jdbctemplate(datasource); /添加public void save(person person) throws exceptionjdbctemplate.update(insert into person (name) values(?), n

20、ew objectperson.getname(), new intjava.sql.types.varchar);使用jdbctemplate获取一条记录service transactionalpublic class personservicebean implements personservice private jdbctemplate jdbctemplate;resourcepublic void setdatasource(datasource datasource) this.jdbctemplate = new jdbctemplate(datasource); publ

21、ic person getperson(integer id)rowmapper rowmapper = new rowmapper()public object maprow(resultset rs, int rownum) throws sqlexception person person = new person();person.setid(rs.getint(id);person.setname(rs.getstring(name);return person;return (person)jdbctemplate.queryforobject(select * from pers

22、on where id=?, new objectid, new intjava.sql.types.integer, rowmapper);使用jdbctemplate获取多条记录service transactionalpublic class personservicebean implements personservice private jdbctemplate jdbctemplate;resourcepublic void setdatasource(datasource datasource) this.jdbctemplate = new jdbctemplate(data

23、source);public list getpersons()rowmapper rowmapper = new rowmapper()public object maprow(resultset rs, int rownum) throws sqlexception person person = new person();person.setid(rs.getint(id);person.setname(rs.getstring(name);return person;return jdbctemplate.query(select * from person, rowmapper);spring2.5+hibernate3.3+struts1.3整合开发org.hibernate.dialect.mysqldialectcom/iesgroup/crm/bean/user.hbm.xml实体bean配置模版.hbm.xml com/iesgroup/crm/bean/user.hbm.xml

温馨提示

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

评论

0/150

提交评论