




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 一 基本概念 Spring 的核心是轻量级 Lightweight 的容器 Container 它实现了 IoC 容器 非侵 入性 No intrusive 的框架 并提供 AOP 概念的实现方式 提供对持久层 Persistence 事务 Transaction 的支持 提供 MVC Web 框架的实现 并对一些常用的企业服务 API Application Interface 提供一致的模型封装 是一个全方位的应用程序框架 Application framework 另外 Spring 也提供了对现有框架 Struts JSF Hibernate 等 的整合方案 Spring 旨在分离体系结构的层次 因此每一层都可以修改而不会影响到其它层 每一 层都不知道其上层的关注点 就其可能而言 只对所紧挨的下一层有依赖 层与层之间的 依赖通常是以接口的形式表现 以确保其耦合尽可能松散 容器管理事务 容器 贯穿始终 1 对象生命周期的管理 2 容器本身具备功能 对现有表现层的支持与 ORM 紧密结合 可使用声明式事务管 理 AOP 标准接口的实 现 容器管理的声 明式的种种事务 对 JDBC 采用模板 回调 声明的 JDBC 事务管理 提供了 Bean 工厂 对 Bean 工厂的扩 展 比如对事务 国际化的支持 自己的 MVC 实现 2 加在自己的类中 需要自己调用则为显示调用 而尽量用容器隐式调用 Spring 即为隐式 调用 声明式编程 Spring 轻量级容器体现在 只需设置一个 Jar 文件到 CLASSPATH 不用去调用它 但又可以拥有其强大的功能 组件的极大程度的复用 让层与层中耦合度低 Loosely Coupled 工厂类创建 DAO 对象 声明式编程 在 xml 文件中声明 基于 POJO 类 支持事务 事务是根本 而 EJB 事务由 Container 管理 Spring 将 View 层与持久层 比如与 Hibernate 联系起来 Spring 简化 Hibernate 的使 用 还可以帮助管理 Hibernate Spring 本身没有 O R mapping 因为有 Hibernate 她已经 做得很好了 Spring 将编译时异常 checked 转化为运行时异常 runtime 比如 JDBC 则为编 译时异常 即必须写 try catch 而 Hibernate 程序为运行时异常 在 spring framework 2 0 5 dist 目录下 有 jar 文件 dtd 文件 tld 文件 总之 Spring 是一个轻型容器 light weight container 其核心是 Bean 工厂 Bean Factory 用以构造我们所需要的 M Model 在此基础之上 Spring 提供了 AOP Aspect Oriented Programming 面向层面的编程 的实现 用它来提供非管理环境下 申明方式的事务 安全等服务 对 Bean 工厂的扩展 ApplicationContext 更加方便我们实现 Java EE 的应用 DAO ORM 的实现方便我们进行数据库的开发 Web MVC 和 Spring Web 提供了 Java Web 应用的框架或与其它流行的 Web 框架进行集成 二 IoC Inversion of Control 1 定义 组件之间的组件之间的依赖关系依赖关系由容器在由容器在运行时运行时决定 决定 例如 B 对象所依赖的 A 对象是由 Spring 创建好并且通过 Set 方法传递注入过来的 最基本的优点体现在 若 A 为接口 让 B 依赖于接口 只看接口不管实现类 可把工 厂类全部替换掉 对象均为容器创建 到时还能把容器的功能融入到其中 IoC 要求 容器尽量不要侵入到应用程序中去 应用程序本身可以依赖于抽象的接口 JavaBean调用调用 包含包含Spring 控制权由对象本身转向容器 由容器根 据配置文件去创建实例并创建各个实例 之间的依赖关系 3 容器根据这些接口所需要的资源注入到应用程序中 也就是说应用程序不会主动向容 器请求资源 容器会自动把这些对象给应用程序 IoC 有基于 set 方式的注入 property 基于构造方法的注入 IoC 核心的 bean 工厂 在 Spring 中 bean 工厂创建的各个实例称作 bean 业务组件 间的依赖是容器 Bean 工厂 解决的 BeanFactory 负责读取 Bean 定义文件 管理对 象的加载 生成 维护 Bean 对象与 Bean 对象的依赖关系 负责 Bean 的生命周期 对于简单的应用程序来说 使用 BeanFactory 就已经足够来管理 Bean 在对象的管理 上就可以获得许多的便利性 Spring 中有两个包里的类都可以做 IoC beans 包 org springframework beans 包 context 包 org springframework context 包 其类功能更加强大 2 bean 工厂创建 bean 的三种方式 通过构造方法直接创建 通过静态工厂方法创建 通过非静态工厂方法创建 3 Spring 中实现 IoC 的方式 依赖注入 Dependency Injection Spring 中依赖注入的两种方式 通过 setter 方法注入 Huangwp 其中 name 属性的取值依 setter 方法名而定 Spring 推荐使用 setter 方法注入 通过构造方法注入 4 黄总 男 46 其中 index 表示构造方法中的参数索引 第一个参数索引为 0 type 表示构造方法中 参数的类型 两种注入方式的区别 Constructor 可以在构建对象的同时 把依赖关系也构建好 对象创建后好就已经 准备好了所有的资源 安全性高 Setter 创建完对象之后再通过 set 方法进行属性的设定 4 设置属性时可选的标签 value 基本类型 包装类型 或 String 类型 ref 引用工厂中其它的 bean list List 或数组类型 set Set 类型 用法与 list 类似 map Map 类型 props Properties 类型 键值为 String 类型的 所以直接写值 举例 List Set Map Properties 5 如果 key 依赖其它对象 用 key ref 如果还是一个 Map 可再嵌套 abstract 属性 如果在配置文件中把某个方法设置成为 abstract true 的 缺省 false 那么不能通过 beanFactory 获得 bean 的实例 lazy init 属性 如果使用的是 XmlBeanFactory 来获得 beanFactory 缺省的是延迟加载 如果不想延迟加 载 则需要把工厂 bean 实例的 lazy init 设置为 false 例如 5 自动装配 自动将某个 bean 注入到另一个 bean 的属性当中 bean 标签的 autowire 属性 其分类如下表 大型应用不推荐使用 因为可读性太差 模式模式说明说明 no 不使用自动装配 必须通过 ref 元素指定依赖 这是默认设置 由于显式 指定协作者可以使配置更灵活 更清晰 因此对于较大的部署配置 推荐 采用该设置 而且在某种程度上 它也是系统架构的一种文档形式 byName 根据属性名自动装配 此选项将检查容器并根据名字查找与属性完全一致 的 bean 并将其与属性自动装配 例如 在 bean 定义中将 autowire 设置 为 by name 而该 bean 包含master属性 同时提供setMaster 方法 Spring 就会查找名为 master 的 bean 定义 并用它来装配给 master 属性 byType 如果容器中存在一个与指定属性类型相同的 bean 那么将与该属性自动装 配 如果存在多个该类型的 bean 那么将会抛出异常 并指出不能使用 byType方式进行自动装配 若没有找到相匹配的 bean 则什么事都不发生 属性也不会被设置 如果你不希望这样 那么可以通过设置 dependency check objects 让 Spring 抛出异常 6 模式模式说明说明 constructor 与byType的方式类似 不同之处在于它应用于构造器参数 如果在容器中 没有找到与构造器参数类型一致的 bean 那么将会抛出异常 autodetect 通过 bean 类的自省机制 introspection 来决定是使用constructor还 是byType方式进行自动装配 如果发现默认的构造器 那么将使用byType 方式 6 依赖检查 检查 bean 的属性是否完成依赖关系的注入 bean 标签的 dependency check 属性 作用 检查 bean 的属性是否完成依赖关系的注入 分类 simple 只查看简单的类型是否完成依赖注入 基本类型和字符串 objects 检查对象类型是否完成依赖注入 all 检查全部的类型是否完成依赖注入 none 默认的设置 表示不检查依赖性 7 生命周期方法 init method 也可实现接口 org springframework beans factory InitializingBean destroy method 也可实现接口 DisposableBean 8 单例 bean 默认情况下 从 bean 工厂所取得的实例为 Singleton bean 的 singleton 属性 9 Aware 相关接口 可以通过实现 Aware 接口来获得 Spring 所提供的资源或使用某些功 能 org springframework beans factory BeanNameAware 此接口用得不多此接口用得不多 实现 BeanNameAware 接口的 Bean 类 在依赖关系设定完成后 初始化方法之前 会 7 将 Bean 在定义文件中的名称通过 setBeanFactory 方法设定给 Bean org springframework beans factory BeanFactoryAware 要重视要重视 实现 BeanFactoryAware 接口的类 在依赖关系设定完成后 初始化方法之前 Spring 容器将会注入 BeanFactory 的实例 放弃一些反向控制 在需要 B 对象时再根据需要 org springframework context ApplicationContextAware 10 ApplicationContext 的功能扩展 org springframework context ApplicationContext 其基本功能与 BeanFactory 很相似 还 提供一个应用程序所需的更完整的框架功能 例如 提供取得资源文件更方便的方法 提 高文字消息解析方法 支持国际化消息等 BeanPostProcessor 若想在 Spring 对 bean 完成依赖注入之后 再补充一些后续操作 则可以定义一个 bean 类来实现接口 org springframework beans factory config BeanPostProcessor 然后在配置文件中定义该 bean 类 从而 Spring 容器会在每一个 bean 被初始化之前 之后分别执行实现了该接口的 bean 类的 postProcessBeforeInitialization 方法和 postProcessAfterInitialization 方法 BeanFactoryPostProcessor 对 Bean 工厂修改其它支持 CustomEditorConfigurer 可借助实现了接口 java beans PropertyEditor 的类 并依据当 中的实现 将字符串类型转换为指定类型的对象 PropertyPlaceholderConfigurer 可将配置文件中属性值用 key 形式表示 则会将 其值替换成指定的属性文件中 key 所对应的 value PropertyOverrideConfigurer 可借助该类在指定的属性文件中设定一些优先的属性 将 忽略配置文件中对应属性的设定值 注意 属性文件中设定属性值的格式为 beanName propertyName value 国际化消息的支持 可通过 ApplicationContext 继承于 MessageSource 的 8 getMessage 方法获得指定资源文件中的消息 配置如下 事件的支持 可发布的事件 ApplicationEvent 发布事件的方法 publishEvent ApplicationEvent 事件监听接口 ApplicationListener 11 ApplicationContext 管理 bean 的执行阶段 他回预先实例化所有的 singleton bean 创建 bean 属性注入 依赖关系的注入 BeanNameAware 接口实现类的 setBeanName 方法 BeanFactoryAware 接口实现类的 setBeanFactory 方法 ApplicationContextAware 接口实现类的 setApplicationContext 方法 BeanPostProcessor 接口实现类中的 postProcessBeforeInitialization 方法 init 方法调用前要做的后续操作 InitializingBean 接口实现类的 afterPropertiesSet 方法 Bean 定义文件中 init method 属性所指定的方法 BeanPostProcessor 接口实现类中的 postProcessAfterInitialization 方法 12 FactoryBean 用来创建 bean 注意 通过 bean 工厂的 getBean myObject 得到的是 FactoryBean 所生产的产品 getBean myObject 得到的是 FactoryBean 实例本身 三 AOP Aspect orented programming 面向层面编程 重点 难点 1 AOP 学习目标 使所需要的功能能够加在任何类中 而不需要调用 借助于 Spring 编写一个自己的切面 加到任何一个 Java 中 9 Spring 本身也提供了编写好的切面功能 切面有最大程度的复用性 耦合度趋于零 在事务方面 AOP 用得较成功 2 代理的两种方式 静态代理 针对每个具体类分别编写代理类 针对一个接口编写一个代理类 动态代理 针对一个方面编写一个 InvocationHandler 然后借用 JDK 反射包中的 Proxy 类为 各种接口动态生成相应的代理类 AOP 的主要原理 动态代理动态代理 研究一下动态代理的写法 3 AOP 中思想和名词术语 Aspect 方面 层面 切面 是一段能够被 植入 到程序中的代码 Join Point 结合点 联结点 加入业务流程的点或时机 Pointcut 切入点 作用点 指定某个方面在哪些联结点织入到应用程序中 Advice 通知 行为 某个方面的具体实现 代表了一个动作 LogHandler JointpointJointpointJointpoint SecurityHandler Aspects Cross cuting concerns 被辨认为 Pointcuts 根据 具体设计为具体设计为 AdvicesWeave Logging 业务流程 业务流程 业务流程 业务流程 业务流程 业务流程 10 Advisor 切入点配置器 由 Pointcut 和 Advice 共同构成 Pointcut Spring 根据类名称及方法名称定义 Pointcut 表示 Advice 织入至应用程序的 时机 org springframework aop Pointcut ProxyFactoryBean 用来创建代理对象 interfaces of target bean implemented Advice Advisor bean 创建代理对象需指定的三要素 target 设定目标对象 只能是一个 proxyInterfaces 设定代理接口 目标对象所实现的接口 interceptorNames 设定拦截器的名字 各个 advice 或 advisor bean 的列表 AdviceAdvice 五种 根据织入的时机不同而划分 五种 根据织入的时机不同而划分 Before Advice 在目标对象的方法执行之前加入行为 要实现的接口 org springframework aop MethodBeforeAdvice After Advice 在目标对象的方法执行之后加入行为 要实现的接口 org springframework aop AfterReturningAdvice Throw Advice 在目标对象的方法发生异常时加入行为 11 要实现的接口 org springframework aop ThrowsAdvice Around Advice 在目标对象的方法执行前后加入行为 要实现的接口 org aopalliance intercept MethodInterceptor Introduction Advice 引入的行为 增加了可操作的方法 声明要添加的功能接口 创建引入 Advice 继承 org springframework aop support DelegatingIntroductionInterceptor 并实现添加的 功能接口 在配置文件中定义一个 DefaultIntroductionAdvisor 的 bean 需要两个构造方法的参数 Advice 和添加的功能接口 PointcutAdvisor Pointcut 定义了 Advice 的应用时机 在 Spring 中 使用 PointcutAdvisor 将 Pointcut 和 Advice 结合为一个对象 NameMatchMethodPointcutAdvisor 可用来指定 Advice 所要应用的目标对象上的方法名 称 RegexpMethodPointcutAdvisor 可使用 Regular expression 定义 Pointcut 在符合 Regular expression 的情况下应用 Advice 其 pattern 属性用来指定所要符合的完整类名 包括 package 名称 及方法名 定义该属性时可使用的符号包括 符号符号描述描述 符合任意一个字符 符合前一个字符一次或多次 符合前一个字符零次或多次 转义字符 用来转义正则表达式中使用到的字符 12 AutoProxy 自动代理 BeanNameAutoProxyCreator 根据 bean 的名字为其自动创建代理对象 bean 工厂自动 返回其代理对象 DefaultAdvisorAutoProxyCreator 自动将 Advisor 应用到符合 Pointcut 的目标对象上 四 Spring 的 Web MVC 1 DispatcherServlet 作为前端控制器 负责分发客户的请求到 Controller 在 web xml 中的配置如下 mvc org springframework web servlet DospatcherServlet contextConfigLocation WEB INF mvc servlet xml 13 mvc do 2 Controller 负责处理客户请求 并返回 ModelAndView 实例 Controller 必须实现接口 org springframework web servlet mvc Controller 实现该接口中 的方法 handleRequest 在该方法中处理请求 并返回 ModelAndView 实例 3 HandlerMapping DispatcherServlet 根据它来决定请求由哪一个 Controller 处理 默认情况下 DispatcherServlet 将使用 org springframework web servlet handler BeanNameUrlHandlerMapping 即使用和客户请求的 URL 名称一致的 Controller 的 bean 实例来处理请求 另外一种常用的 HandlerMapping 为 org springframework web servlet handler SimpleUrlHandlerMapping 配置如下 在以上 mappings 属性设置中 key 为请求的 URL 而 value 为处理请求的 C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45771-2025精细陶瓷干湿环境下陶瓷薄膜的摩擦磨损特性评价方法
- 出纳代收代付协议书范本
- 拆迁原地分配协议书范本
- 2025年FS-L系列柔软剂项目发展计划
- 消防维保终止协议书范本
- 心理健康调试情绪课件
- 简易销售框架协议书范本
- 施工企业双方协议书范本
- 2025年企业文化展示系统项目发展计划
- 2025版活动板房租赁与社区文化建设合作合同
- 静脉药物调配中心PIVAS静脉用药配置中心静脉药物配置中心静配中心细胞毒性药物的配置方法
- 电网检修工程预算定额
- 第九讲 全面依法治国PPT习概论2023优化版教学课件
- 英文字母书写练习直接打印
- GB/T 24620-2022服务标准制定导则考虑消费者需求
- JJF 1221-2009汽车排气污染物检测用底盘测功机校准规范
- 专用电话-手册dsl单板使用说明
- 环网柜基础知识课程课件
- 2015热力公司锅炉水冷壁爆管事故应急演练方案
- 北师大版三年级数学下册《第6单元认识分数课时1》课堂教学课件PPT小学公开课
- 原始反射以及肌张力判定
评论
0/150
提交评论