Web开发框架第一讲《spring框架》.ppt_第1页
Web开发框架第一讲《spring框架》.ppt_第2页
Web开发框架第一讲《spring框架》.ppt_第3页
Web开发框架第一讲《spring框架》.ppt_第4页
Web开发框架第一讲《spring框架》.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1 第一章 Spring框架简介 2 Spring简介 Spring是一个开源框架 是为了解决企业应用开发的复杂性而创建的 目的 解决企业应用开发的复杂性 功能 使用基本的JavaBean代替EJB 并提供了更多的企业应用功能 范围 任何Java应用 简单来说 Spring是一个轻量级的控制反转 IoC 和面向切面 AOP 的容器框架 3 Spring简介 轻量 从大小与开销两方面而言Spring都是轻量的 完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布 并且Spring所需的处理开销也是微不足道的 非侵入 在应用中 一般不需要引用springjar包里的类 控制反转 Spring通过一种称作控制反转 IoC 的技术促进了松耦合 当应用了IoC 某一接口的具体实现类的选择控制权从调用类中移除 转交给第三方裁决 面向切面 Spring提供了面向切面编程的丰富支持 允许通过分离应用的业务逻辑与系统级服务 例如审计 auditing 和事务 管理 进行内聚性的开发 应用对象只实现它们应该做的 完成业务逻辑 仅此而已 它们并不负责其它的系统级关注点 例如日志或事务支持 4 Spring简介 Spring即是一个容器又是一个框架 容器 Spring包含并管理应用对象的配置和生命周期 在这个意义上它是一种容器 你可以配置你的每个bean如何被创建 基于一个可配置原型 prototype 你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例 以及它们是如何相互关联的 框架 Spring提供了很多基础的与业务逻辑无关的功能 比如 事务管理 持久化框架集成等等 使用Spring框架 开发人员可以专注于业务逻辑开发 这个意义上讲它是一个框架 5 第二章 控制反转 IOC 6 控制反转 IOC 控制反转 InverseofControl 是Spring的内核 AOP 声明式事务等功能都建立在该功能之上 它涉及到代码解耦 设计模式 代码优化等问题的考虑 它包括两个方面的内容 其一是控制 其二是反转 到底是什么东西的控制被反转了呢 来看个例子 导演 剧本 场景 剧中人 演员 7 控制反转 对于软件来说 控制反转即是某一接口的具体实现类的选择控制权从调用类中移除 转交给第三方裁决 依赖注入DI DependencyInjection 将调用类对接口的实现类的依赖关系由第三方注入 以移除调用类对接口实现类的依赖 8 控制反转 publicclassSaveEmployeeEditActionextendsSsoaAction 定义接口publicEmployeeManageremployeeManager 属性注入publicvoidsetEmployeeManager EmployeeManageremployeeManager this employeeManager employeeManager publicStringexecute throwsException 使用接口employeeManager updateEmployee ee 第三方控制实现类 9 IOC类型构造函数注入在构造函数注入中 通过调用类的构造函数将接口实现类通过构造函数变量传入 如下代码所示publicclassMenuBufferImpl publicMenuBufferImpl publicMenuBufferImpl PrivilegeDAOprivilegeDAO this privilegeDAO privilegeDAO 注入 控制反转 10 控制反转 属性注入属性注入可以有选择地通过Setter方法完成调用类所需依赖的注入 更加灵活方便 一般使用属性注入 见前面例子 11 控制反转 课后扩展 刚才看到 spring框架通过一个配置文件实现控制反转 在容器启动时根据配置文件的描述信息 自动实例化Bean并完成依赖关系的建立 从容器中即可返回准备就绪的Bean实例 以待以后使用 Spring之所以有这样的能力 主要归功于java语言本身的类反射功能 反射机制简单的说就是我们利用编程的方式实现类的实例化 大家课下可以查询这方面的知识 加深对控制反转的了解 12 BeanFactory Spring实现控制反转是通过配置方式来实现的 主要是xml配置文件 该文件一般命名为 beans xml 格式一般如下 13 控制反转 BeanFactory Spring通过该配置文件描述Bean及Bean之间的依赖关系 在容器启动时实例化Bean并建立Bean之间的依赖关系 Spring的Ioc容器在完成这些底层工作的基础上 还提供了Bean实例缓存 生命周期管理 Bean实例代理 事件发布 资源装载等高级服务 BeanFactory Bean工厂 是Spring框架最核心的接口它提供了高级Ioc的配置机制 使管理不同类型的java对象成为可能 一般我们称BeanFactory为Ioc容器 使用如下 14 ApplicationContext 应用上下文 建立在BeanFactory之上 提供了更多面向应用的功能 更易于创建实际应用 有时在web开发中为了方便也称ApplicationContext为Spring容器 控制反转 ApplicationContext 15 WebApplicationContext是专门为Web应用准备的 它允许从相对于Web根目录的路径中装载配置文件完成初始化工作 从WebApplicationContext中可以获得ServletContext的引用整个web应用上下文对象将作为属性放置到ServletContext中 以便Web应用环境可以访问Spring引用上下文 Spring专门提供了一个工具类WebApplicationContextUtils 通过该类的getWebApplicationContext ServletContextsc 方法可以从ServletCOntext中获取WebApplicationContext实例 使用例子 控制反转 WebApplicationContext 16 控制反转 17 控制反转 装配bean 装配一个bean权限管理prv上段信息提供了实例化Car和Boss这两个Bean必须的信息 Ioc容器完全可以根据该信息创建者连个Bean实例 Bean命名 一般情况 在配置一个bean是 需要为期指定一个id属性作为Bean的名称 id在Ioc容器中必须是唯一的 此外id的命名需要满足XML对id的命名规范 必须以字母开始 逗号和空格这些非完全结束符号是非法的 如果实际使用中需要使用一些id不允许的特殊字符 可以使用bean的name属性来命名 name没有命名上的限制 几乎可以使用任何字符 如 ab 123等 Id和name都可以指定多个名字 名字中间使用逗号 分号 或者空格进行分割 这里为bean定义了三个名字 car1 car2 car3 他们是一样的 可以通过任何一个取得bean实例 配置文件中不能出现相同的id 但可以出现相同的name 根据name取得bean时 以最后出现的name为准 推荐使用id 18 属性注入配置使用属性注入时 bean配置方式如下 hongqi 200 2000两种方式设置属性的值 1 通过字面值value 2 通过idref引用别的bean 上例中name的值是car 控制反转 装配bean 19 控制反转 装配bean 构造函数注入装配构造函数注入通过标记完成 1 按类型匹配入参 barand color maxSpeed 2 按索引匹配入参 barand color maxSpeed 20 注入参数详解1 字面值即可用字符串表示的值 这些值元素标签进行注入 比如hongqi对于一些特殊符号可以使用的特殊处理标签 比如 当然也可以使用转义序列处理特殊符号 xml中共有五个特殊符号 它们的转义序列如下 控制反转 装配bean 21 2 引用其它beanidrefidref元素用来将容器内其它bean的id传给或元素 同时提供错误难功能 ref形式一 这是最常见的形式是通过使用ref标记指定bean属性的目标bean 通过该标签可以引用同一容器或父容器内的任何bean 无论是否在同一XML文件中 XML bean 元素的值即可以是指定的bean的id值也可以是其name值 形式二 使用ref的local属性指定目标bean 它可以利用XML解析器来难所引用的bean是否存在同一文件中 local属性值必须是目标bean的id属性值 形式三 通过使用ref的parent属性来引用当前窗口的父容器中的bean parent属性值即可以是目标bean的id值 也可以是name属性值 控制反转 装配bean 22 3 内部bean 所谓内部bean innerbean 是指在一个bean的或中使用元素定义的bean 内部bean不能被其它bean引用 只能在声明处为外部bean提供实例注入 内部bean即使提供了id name scope属性也会被忽略 控制反转 装配bean 23 4 集合合并 从Spring2 0开始 SpringIoC容器将支持集合的合并 父子集合元素合并后的值就是子集合中的最终结果 而且子集合中的元素值将覆盖父集合中的对应的值 administrator support sales support somecompany co uk合并后内容 administrator administrator sales sales support support somecompany co uklist集合有排序功能 父bean的列表内容将排在子bean列表内容的前面 merge属性必须在继承的子bean中定义 控制反转 装配bean 24 5 Nulls用于处理null值 Spring会把属性的空参数当作空字符串处理 等同于excapleBean setEamil 而null值则可以使用元素来表示 控制反转 装配bean 25 6 简写 针对常见的value值或bean的引用 Spring提供了简化格式用于替代和元素 元素都支持value属性 它可以用来替代内嵌的元素 hello hello hello 和支持类似的简写属性ref 它可以替找整个内嵌的元素 切记 尽管存在等同于元素的简写形式 但并没有的简写形式 map中的entry元素的简写形式为key key ref和value value ref属性 Spring建议使用简写形式 控制反转 装配bean 26 7 延迟初始化bean lazy init属性 如果一个bean被设置为延迟初始化 而另一个非延迟初始化的singletonbean依赖于它 那么当ApplicationContext提前实例化singletonbean时 它必须也确保所有上述singleton依赖bean也被预先初始化 当然也包括设置为延迟实例化的bean 在容器层次中通过在元素上使用 default lazy init 属性来控制延迟初始化也是可能的 控制反转 装配bean 27 8 自动装配属性 模式说明no不使用自动装配 必须通过ref元素指定依赖 这是默认设置 byName根据属性名自动装配 Spring将检查容器并根据名字查找与属性完全一致的bean 并将其与属性自动装配 byType如果容器中存在一个与指定属性类型相同的bean 那么将与该属性自动装配 如果存在多个 则抛出异常 constructor与byType的方式类似 不同之处在于它应用于构造器参数 如果在容器中未找到与构造器参数类型一致的bean 那么将抛出异常 autodetect通过bean类的自省机制 introspection 来决定是使用constructor还是byType方式进行自动装配 如果发现默认的构造器 那么将使用byType方式 控制反转 装配bean 28 Bean之间的关系1 继承如果多个bean存在相同的配置信息 spring允许我们定义一个父 子将自动继承父的配置信息 200 控制反转 装配bean 29 2 依赖depends on属性可以用于当前bean初始化之前显式的强制一个或多个bean被初始化 若需要表达对多个bean的依赖 可以在中将指定的多个bean名字用分隔符进行分隔 分隔符可以是逗号 空格及分号等 3 引用即前面讲的idref 控制反转 装配bean 30 循环依赖问题Spring容器能够顺利实例化以构造函数注入进行装配的bean有一个前提 Bean构造函数入参引用的对象必须已经准备就绪 由于这个机制的限制 如果两个bean都采用构造函数注入 而且都通过构造函数入参引用对方 就会发生类似于线程死锁的循环依赖问题 如下 Publicclasscar Publiccar Bossboss this boss boss Publicclassboss Publicboss Carcar this car carl 当启动Ioc容器时 由于存在循环依赖问题 Spring容器将无法成功启动 这时我们可以混合使用函数注入和属性输入来解决该问题 即 把上面的一个函数注入改为属性注入方式 控制反转 装配bean 31 第三章 面向切面编程 AOP 基础 32 面向切面编程 AOP AOP相关概念连接点 Joinpoint 程序执行的某个特定位置 比如类开始初始化前 类初始化后 某个方法调用前 调用后等 一个类或一段程序代码拥有的一些具有边界性质的特定点 这些代码中的特定点就称为 连接点 Spring仅支持方法的连接点 切点 Pointcut 匹配连接点 Joinpoint 的断言 连接点相当于数据记录 切点相当于查询条件 一个切点可以匹配多个连接点 增强 Advice 织入到目标类连接点上的一段程序代码 目标对象 Target 增强逻辑的织入目标类引介 Introduction 引介是一种特殊的增强 为类添加一些属性和方法 通过它可以动态的为业务类增加接口的实现逻辑 让业务类成为这个接口的实现类 33 织入 Weaving 将增强添加到对目标类具体连接点上的过程 代理 Proxy 一个类被AOP织入增强后 就产生了一个结果类 它是融合了原类和增强逻辑的代理类 根据不同的代理方式 代理类既可能是和原类具有相同接口的类 也可能是原类的子类 所以我们可以采用调用原类相同的方式调用代理类切面 Aspect 切面由切点和增强 引介 组成 它既包括了横切逻辑的定义 也包括了连接点的定义 springAOP就是负责实施切面的框架 它将切面定义的横切逻辑织入到切面所指定的连接点中 AOP的工作重点在于如何将增强应用于目标对象的连接点上 这包括两个工作 1 如何通过切点和增强定位到连接点上 2 如何在增强中编写切面的代码 面向切面编程 AOP 34 代理机制 AOP通过动态代理技术在运行期织入增强代码 首先了解下AOP使用的两种代理机制 1 基于JDK的动态代理JDK1 3以后 java提供了动态代理技术 允许开发者在运行期创建接口的代理实例 JDK动态代理主要涉及两个类 Java lang reflect ProxyJava lang reflect InvocationHandlerInvocationHandler是一个接口 可以通过实现该接口定义的横切逻辑 并通过反射机制调用目标类的代码 动态的将横切逻辑和业务逻辑编织在一起 Proxy利用InvocationHandler动态创建一个符合某一接口的实例 生成目标类的代理对象 例子如下 面向切面编程 AOP 35 2 基于CGlib的动态代理JDK只能为接口创建代理实例 对于那些没有通过借口定义业务方法的类 可以通过CGLib创建代理实例 CGLib采用底层字节码技术 可以为一个类创建子类 并在子类中采用方法拦截

温馨提示

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

评论

0/150

提交评论