ImageVerifierCode 换一换
你正在下载:

Spring.docx

[预览]
格式:DOCX , 页数:18 ,大小:415.11KB ,
资源ID:3908157      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3908157.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring.docx

1、Spring控制反转: 应用本身不负责依赖对象的创建以及维护,依赖对象的创建和维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转.例如: 原来的业务类UserBizImpl UserDao dao = new UserDaoImpl(); /严重的依赖 public boolean addUser(User user)可以改为UserBizImpl UserDao dao; /通过构造器注入对象 public UserBizImpl(UserDao dao) this.dao = dao ; /通过setter方法注入对象 public void setDao

2、(UserDao dao) this.dao = dao ; public boolean addUser(User user)所谓的依赖注入就是:在运行期间,由外部容器动态的将以来的对象注入到组件中.使用Spring带来的好处:1.降低组件之间的耦合度,实现软件各层之间的解耦2.可以使用容器提供的众多服务,如:事务管理服务,持久化服务等等;当我们使用容器管理事务时,开发人员不需要手动控制事务,也不需要复杂的事务传播 例如: 关于事务管理 Hibernate代码: public void save() Session session = HibernateSessionFactory.getS

3、ession(); session.begintransaction(); /持久化操作代码 session.save(.); session.getTransaction().commit(); /catch session.getTransaction().rollback(); Jdbc事务管理代码: Connection conn = null; try . conn.setAutoCommit(false); Statement stmt = conn.createStatement(); stmt.executeUpdate(update .); mit(); catch(Exce

4、ption e) conn.rollback(); finally conn.close(); 3.容器提供单利模式支持,开发人员不需要再自己编写实现代码4.容器提供了AOP技术,利用它很容易实现权限拦截,运行期监控等功能.5.容器提供了众多的辅助类,使用这些类能够加快应用的开发,例如JdbcTemplate,HibernateTemplate.6.Spring对于主流的应用框架提供了集成支持,例如集成Hibernate,Struts等,更便于应用的开发.?Spring是轻量级框架还是重量级框架. 答: 轻量级还是重量级主要看它使用了多少服务.对于Spring容器,它提供了很多服务,但是这些服

5、务并不是默认为应用打开的. 如果只使用spring核心服务,我们可以认为此时应用输入轻量级的,如果使用了spring提供的大量的服务,则可以认为此时输入重量级.例如EJB,EJB容器就因为它默认为应用提供了EJB规范中的所有功能,所以它属于重量级.搭建Spring开发环境 把以下 jar 包加入到工程的 classpath 下: distspring.jar: 该文件中包含了所有标准的 spring 模块 libjakarta-commonscommons-logging.jar:spring 使用该库输出日志信息 如果使用了AOP,还需要下列jar文件 Lib/aspect/aspectjw

6、eaver.jar和aspectjrt.jar Lib/cglib/cglib-nodep-2.X.X.jar 如果使用JSR-250中的注解,入Resource/PostConstruct/PreDestroy,还需要下列jar文件 Lib/j2ee/common-annotations.jar Spring 的配置文件: 一个典型的 Spring 项目需要创建一个或多个 Bean 配置文件, 这些配置文件用于在 Spring IOC 容器里配置 Bean. Bean 的配置文件可以放在 classpath 下, 也可以放在其它目录下. 可以复制 samplesjpetstorewarWEB

7、-INFapplicationContext.xml实例化Spring容器的两种方式:1. 在类路径下寻找配置文件来实例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(new String“bean.xml”);2. 在文件系统路径下寻找配置文件来实例化容器ApplicationContext ctx = newFileSystemXmlApplicationContext(new String“d:bean.xml”);注:Spring的配置文件可以有多个,可以通过String数组传入.注:如果只有一个配置文件可以

8、直接写”bean.xml”配置文件路径/ctx.close()释放容器补充: spring编写配置文件时的提示信息 简单示例1. 将一个bean教给spring容器管理. 输出一句helloworld三种实例化bean的方式 1. 使用类构造器实例化 /调用默认的构造函数获取对象2. 使用静态工厂方法实例化public class UserServiceFactory public static UserService createUserService() return new UserServiceImpl (); 3. 使用实例工厂方法实例化public class UserServic

9、eFactory public UserService createUserService return new UserServiceImpl (); Bean的作用域 :可以在测试类中拿两次然后对比一下singleton :是所有 Bean 的默认作用域.(购物车的实现显然不能使用singleton) 在每个Spring IoC容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=”true”来延迟初始化bean,这时候只有第一次获取bean才会初始化bean.如:如果想对所有的bean都应用延迟初始化,可以在根节点

10、beans设置default-lazy-init=”true”,如下:Prototype 每次调用都会创建单独的对象.其它: session,request,globalSession 作用域为webApplicationContext环境适用.注:在低版本的Spring中,由于只有两个Bean作用域(singleton和prototype),所以采自用singlon=”true|false”的配置方式,Spring2.0为了向后兼容,依旧支持这种配置方式。不过,spring 2.0推荐采自新的配置方式:scope=”(补充:定制 Bean 的初始化和销毁过程)情景: 在企业开发中, 组件在使

11、用之前往往需要执行一些特定类型的初始化任务, 其中包括打开文件, 打开网络/数据库连接, 分配内存等. 同样, 当组件结束其生命周期时, 也需要执行与之对应的销毁任务. Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进行管理的过程: 通过构造器或工厂方法创建 Bean 实例 为 Bean 的属性设置值和对其他 Bean 的引用 调用 Bean 的初始化方法 Bean 可以使用了 当容器关闭时, 调用 Bean 的销毁方法示例:在购物结账时,购物员的每次交易都要打开账

12、本,然后是记账,最后要关闭账本使用注解的方法(Spring2.5) 在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法. Spring 2.5 里也可以给初始化和销毁方法添加生命周期注解 PostConstructor 和 PreDestory 为了让 Spring 调用初始化和销毁方法, 需要在 IOC 容器里注册 CommonAnnotationBeanPostProcessor 实例: 在配置文件中首先增加context命名空间, 然后在配置文件中添加 元素, 此时 Spring 会自动注册 CommonAnn

13、otationBeanPostProcessor 实例IOC 和 DIIOC(Inversion of Control): 其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式DI(Dependency Injection):IOC 是一种通用的设计原则, 而 DI 则是具体的设计模式, 它体现了 IOC 设计原则. 在 DI 模式里, 容器以一些预先定义好的方式(例如: setter

14、 方法)将匹配的资源注入到每个组件里.注入依赖对象基本类型对象注入: /构造器注入 /属性setter方法注入 , /注意:基本类型复制适用value,引用bean适用ref注入其它bean:方式一: 方式二(适用内部bean,但该bean不能为其它bean所使用.) 补充在 Bean 配置文件中声明 Bean为了让 Spring IOC 容器能够对 Bean 进行实例化, 每个 Bean 都应该提供一个唯一的名称和一个全限定类名.对 Bean 的每个简单类型的属性来说, 可以为其制定 元素. Spring 会尝试将值转换为该属性的声明类型setter 注入使用 元素, 使用 name 属性指

15、定 Bean 的属性名称 (setter注入的另一种写法: xxxx)构造器注入在 元素里声明属性, 因为构造器的参数是基于位置的, 所以 中没有 name 属性(构造器注入的另一种写法: xxx)在 Spring 的 IOC 容器里配置 Bean setter 注入: 最流行的 DI 类型. 容器通过组件里的 setter 方法注入依赖.优点: setter 方法可以自动生成; 简单缺点: 组件使用者或许会忘记给组件注入它需要的依赖; 在第一次注入后,依赖可能会因为 setter 方法的调用而被修改构造器注入: 通过构造器注入依赖.优点: 解决了 setter 注入的缺点缺点: 需通过参数位

16、置来确定参数; 若组件有多个依赖需要注入, 会导致构造器参数列表非常冗长. 在 Bean 的配置文件中, 可以通过 元素为 Bean 的属性或构造器参数指定对 Bean 的引用.通过依赖检查来检查属性IOC 容器里可能会声明很多的 Bean, 这些 Bean 之间的依赖关系通常会比较复杂. 使用 setter 注入并不能保证属性一定会被注入.Spring 的依赖检查特性可以检查 Bean 上的某些类型的所有属性是否被设置.Spring 的依赖检查特性只需在 的 dependency-check 属性里指定依赖检查模式即可*.Spring 的依赖检查特性只能检查属性是否被设置, 但对设置的属性值

17、是 null 的情况则无能为力.Spring 的依赖检查特性只对属性是否通过 setter 方法设置进行检查. 所以, 即使通过构造器注入,依然会抛出异常补充: 适用Required注解检查属性 Spring 的依赖检查特性只能检查某些类型的所有属性. 不能只针对个别属性进行检查. RequiredAnnotationBeanPostProcessor 是 Spring 的 Bean 后置处理器, 它检查所有具有 Required 注解的属性是否已被设置.在setter方法前增加Required注解 Bean 后置处理器是一种特殊类型的 SpringBean, 它能够在每个 Bean 实例化后

18、执行一些额外的工作. 要激活 Bean 后置处理器来进行属性检查, 必须在 Spring IOC 容器里注册它.Spring2.0,或2.5在spring配置文件中: 增加 Spring 2.5: 在配置文件中首先增加context命名空间,为其增加指定的dtd文件:在配置文件中加入下列配置:注意: 要使用注解, 必须在当前应用的 classpath 下包含 libj2eecommon-annotations.jar. 若当前应用使用的是JavaSE 6 则不用导入 RequiredAnnotationBeanPostProcessor 只能检查属性是否被设置, 但对设置的属性值是 null

19、的情况则无能为力.集合类型的装配配置 List, Array, Set配置 java.util.List 类型的属性, 需要指定 标签, 在标签里包含一些元素. 这些标签可以通过 指定简单的常量值, 通过 指定对其他 Bean 的引用. 通过 指定内置 Bean 定义. 通过 指定空元素. 甚至可以内嵌其他集合.数组的定义和 List 一样, 都使用 配置 java.util.Set 需要使用 标签, 定义元素的方法与 List 一样.private Set sets = new HashSet();/省略gettersetter 第一个值 第二个值 private List lists =

20、new ArrayList();/省略gettersetter 第一个值 第二个值 配置 Map, PropertiesJava.util.Map 通过 标签定义, 标签里可以使用多个 作为子标签. 每个条目包含一个键和一个值. 必须在 标签里定义键因为键和值的类型没有限制, 所以可以自由地为它们指定 , , 或 元素. 可以将 Map 的键和值作为 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-ref 和 value-ref 属性定义使用 定义 java.util.Properties, 该标签使用多个 作为子标签. 每个 标签必须定义 key 属

21、性.private Map maps = new HashMap ();/省略gettersetter private Properties properties = new Properties ();/省略gettersetter 第一个值 第二个值 使用 utility scheme 定义集合使用基本的集合标签定义集合时, 不能将集合作为独立的 Bean 定义, 导致其他 Bean 无法引用该集合, 所以无法在不同 Bean 之间共享集合.可以使用 util schema 里的集合标签定义独立的集合 Bean. 需要注意的是, 必须在 根元素里添加 util schema 定义继承 Be

22、an 配置Spring 允许将通用的 Bean 配置抽象出来, 组成一个父 Bean. 继承这个父 Bean 的 Bean 称为子 Bean子 Bean 从父 Bean 中继承配置, 包括 Bean 的属性和在 元素里的属性. 子 Bean 也可以覆盖从父 Bean 继承过来的配置父 Bean 可以作为配置模板, 也可以作为 Bean 实例. 若只想把父 Bean 作为模板, 可以设置 的abstract 属性为 true, 这样 Spring 将不会实例化这个 Bean并不是 元素里的所有属性都会被继承. 比如: autowire, dependency-check, abstract 等.也可以忽略父 Bean 的 class 属性, 让子 Bean 指定自己的类, 而共享相同的属性配置. 但此时 abstract 必须设为 trueXML 配置里的 Bean 自动装配属性里指定自动装配的模式(开发中较少用) Spring IOC 容器可以帮助自动装配 Bean. 需要做的仅仅是在 的 autowire 属性里指定自动装配的模式 byType(根据类型自动装配): 若

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1