spring3.1实例教程.doc_第1页
spring3.1实例教程.doc_第2页
spring3.1实例教程.doc_第3页
spring3.1实例教程.doc_第4页
spring3.1实例教程.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

Spring简介还是通过旧版本学习最新的版本。2003年发布的第一个版本,现在最新的是3.1。Rod Johnson官方网站:Spring的优点:l 低侵入式设计,代码污染低l 独立于各种应用服务器,可以真正实现Write Once,Run Anywhere的承诺l Spring的DI(Dependency Injection)机制降低了业务对象替换的复杂性l Spring并不完全依赖于Spring组件,开发者可自由选用Spring框架的部分或全部。Spring3.1分层架构Spring的安装配置Spring HelloWorld1、 下载spring-framework-3.1.0.RELEASE-with-docs.zip2、 新建Project,把Spring的jar包引入到项目的ClassPath中commons-logging-1.1.1-bin.zip的jar包也需要引入Spring3.1下载包解压后的dist目录下3、 在ClassPath里面新建Spring配置文件applicationContext.xml4、 新建一个Java类HelloWorlda) 提供构造器b) 定义一个测试属性info,并提供setter5、 让Spring来管理对象的创建和依赖关系,必须在Spring配置文件中定义6、 测试获取这个被Spring管理的Bean的实例(HelloWorldTest.java)/获取Spring的ApplicationContext配置文件,注入IOC容器中/(Map: key:String, bean标签的id属性值 =value:Object, bean标签class属性所指类的实例)BeanFactory factory = newClassPathXmlApplicationContext(applicationContext.xml);/通过BeanFactory的getBean方法,从IOC容器里面获取BeanHelloWorld hw1 = (HelloWorld)factory.getBean(hello);/map.get(hello)System.out.println(hw1.getInfo();System.out.println(-);HelloWorld hw2 = (HelloWorld)factory.getBean(hello);System.out.println(hw2.getInfo();System.out.println(hw1);System.out.println(hw2);Spring的控制反转(IOC)和依赖注入(DI)控制反转(IOC)控制反转(Inversion Of Control)就是当一个对象需要依赖于另一个对象时,通常由调用对象来创建被调用对象的实例。在Spring中,创建被调用对象的工作不再由调用对象来完成,而是由Spring容器来完成,然后注入调用对象,这就是Spring的控制反转。Spring IOC容器的关键点:l 必须将被管理的对象定义到Spring配置文件中l 必须定义构造器和需要注入的属性的setter,让Spring将对象注入过来依赖注入(DI)依赖注入(Dependency Injection)是时下的“流行语”,也是目前最优秀的解耦方式,使用依赖注入时,JavaEE应用中的各种组件不需要以硬编码的方式耦合在一起。当某个Java实例需要其他Java实例时,系统会自动提供需要的实例,无需程序显式获取。依赖注入,是Spring的核心机制,可以使Spring的bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。实际上IOC是一种设计模式,而DI只是一种具体的实现方式。l 普通属性的注入array1array2array3list1list2list3set1set2set3set4set5l 对象引用的注入l 设值注入通过属性的setter注入的方式。n 需要提供无参构造器l 构造注入通过构造器注入的方式。n 需要相应的带参数的构造方法privateUserManagerDAOuserMgrDao;publicUserManager(UserManagerDAOuserMgrDao) / TODO Auto-generated constructor stubSystem.out.println(UserManager constructor.);this.userMgrDao = userMgrDao;配置文件:l 设值注入和构造注入的比较n 设值注入的优点u 与传统的JavaBean的写法更相似,更容易让人理解,依赖关系显得更加直观、自然。u 对于复杂的依赖关系,如果采用构造注入会导致构造器过于臃肿,难以阅读。因为Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致Struts+Spring+Hibernate整合开发性能下降。设值注入可以避免这些问题。u 在某些属性可选的情况下,多参数的构造器更加笨重。n 构造注入的优点u 可以在构造器中决定依赖关系的注入顺序。例如,组件中其他依赖关系的注入,常常需要依赖于Datasource的注入。采用构造注入时,可以在代码中清晰地决定注入顺序,优先依赖先注入。u 对于依赖关系无须变化的bean,构造注入更有用处。因为没有setter,所有的关系都在构造器中设定,因此无需担心后续代码对依赖关系产生破坏。u 依赖关系只能在构造器中设定,因为只有组件的创建者才能改变组件的依赖关系。对于组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。n 建议采用设值注入为主,构造注入为辅的注入策略。Spring Bean的其他说明l Bean的标识(id,name,class)id:bean的唯一标识。name:bean的别名,可以有多个。class:bean的具体实现类l Bean的作用域n singleton:单例,在IOC容器里只有一个实例n prototype:每次对bean请求时,都会创建一个新的实例。对bean的请求:将其注入到另外一个bean中,或者调用BeanFactory的getBean方法。n request:针对Web应用的每次请求都生成一个新的实例n session:HttpSessionl 对于NULL值的注入,depends-on,延迟初始化bean(适用于bean比较多的情况)l Bean的生命周期Spring AOPAOP, Aspected Oriented Programming, 面向切面编程OOP,面向对象编程AOP是对OOP一个非常有力的补充。Why AOP?一个典型的业务处理方法,应当包含日志、参数合法性、异常处理、事务控制、权限验证等处理。为了保证系统健壮使用,就要在每个业务方法里都反复地编写这些代码,这样做就没有更多的精力去考虑完善业务处理,质量没有保障,而且会大大降低代码的易读性和可维护性,这些问题正是AOP要解决的问题。代理模式代理模式主要分为:静态代理和动态代理参照工程:Spring3.1_003_AOP_Static_Proxy静态代理采用JDK的动态代理参照工程:Spring3.1_004_AOP_JDK_Dynamic_ProxyAOP中的常用术语使用Spring AOPAnnotation1、 新建Project并完成相关业务类的定义a) Modelnet.vzhang.bean.User.javab) ServiceInterface:net.vzhang.service.UserManager.java实现类: net.vzhang.service.impl.UserManagerImpl.java2、 引入相关的jar包a) Spring3.1的所有的包(为了方便)dist/*.jarb) 引入coommons-logging的jar包c) 引入aopalliance的jar包d) AspectJ的所有jar包3、 定义Aspect类(切面类)packagenet.vzhang.service.aspect;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;AspectpublicclassUserManagerAspect Before(execution(* add*(.)publicvoidcheckBefore() System.out.println(-check Before-);4、 配置Spring AOPa) 把业务Bean和Aspect类配置到Spring IOC容器b) 启用AspectJ5、 测试类TestClient.javapublicclassTestClient publicstaticvoid main(String args) BeanFactory factory = newClassPathXmlApplicationContext(applicationContext.xml);UserManageruserManager = (UserManager)factory.getBean(userManager);System.out.println(userManager.getClass().getName();userManager.findUser(10);userManager.addUser(null);XML步骤:1、Annotion方式步骤的1、2、32、配置文件applicationComtext.xml:注意:在使用Spring AOP的时候业务类需要实现接口,不然就需要使用CGLIB生成目标对象的代理类加入CGLIB(引入CGLIB的jar包和ASM的jar包)关于ASM,不要使用最新的4.0Spring会自动选择用何种方式的代理l JDK动态代理:当目标对象实现了接口的时候l CGLIB的代理:当目标对象没有实现接口的时候要更好的使用AOP,提倡面向接口编程。Spring持久层的封装及数据库事务支持对JDBC的支持DataSource的注入JdbcTemplate的使用HibernateTemplate的使用针对Hibernate 3的声明式事务事务的传播特性l PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启l PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行l PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。l PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。l PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。l PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常l PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED属性执行Spring事务的隔离级别l ISOLATION_DEFAULT:这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应l ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻

温馨提示

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

评论

0/150

提交评论