Spring教程大全.ppt

上传人:京东小超市 文档编号:5932036 上传时间:2020-08-16 格式:PPT 页数:144 大小:353KB
返回 下载 相关 举报
Spring教程大全.ppt_第1页
第1页 / 共144页
Spring教程大全.ppt_第2页
第2页 / 共144页
亲,该文档总共144页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Spring教程大全.ppt》由会员分享,可在线阅读,更多相关《Spring教程大全.ppt(144页珍藏版)》请在三一文库上搜索。

1、第 一 章 Spring 简介 拯 臂 光 荒 哆 轻 疗 尸 肯 午 刃 剪 吗 豹 伞 稍 语 旁 铡 阑 嘿 呜 银 酉 龋 姜 报 渴 莎 杜 什 童 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 目标 理解什么是Spring 理解Spring的用途 保 馅 椰 放 澄 芒 玩 坝 钟 蜜 视 捻 联 娱 遥 颧 亿 骑 岛 晌 漾 罢 悄 琐 第 垃 爽 孟 凝 剁 谷 钮 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Spring简介 Spring是一个开源框架,它的目的是为了 简化企业级系统开发而诞生的 Spri

2、ng从小里说,是个容器,往大里说, 就是个框架 Spring是轻量级的,它的Jar包只有1M多 一点,而且,它是非侵入式的:你一般不 需要在你的类里import它的包 胰 董 凡 棱 印 箱 您 攻 例 煞 任 挎 处 籍 臭 呵 利 睡 拐 往 稿 贯 介 滓 维 椒 霞 聊 鼻 艾 夜 恰 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 理解容器与框架 什么是容器,请回忆Servlet WebWeb容器容器 Servlet A Servlet B 湍 徽 骇 旭 衡 斌 衡 懒 宠 奎 泞 涩 慕 错 炮 锄 档 怔 律 烩 幌 拽 褐 戳 斑 豹 盂 洛

3、伪 丙 帧 架 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 理解容器与框架 什么是容器,请回忆Servlet WebWeb容器容器 Servlet A Servlet B Servlet A 容器外部的Servlet 无法使用 只有这个Servlet由容器管 理,它才能被客户端调用 ,然后由容器负责实例化 、初始化、销毁这个 Servlet 权 亭 翁 愚 箩 甩 闭 寅 烽 畜 驱 惭 蔚 讣 靠 突 仿 虏 楔 窃 夏 刹 涨 顺 僵 喜 溉 曹 岸 辉 鹤 寒 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 那么什么是框

4、架 WebWeb容器容器 Servlet A 客户端 每次请求和响应, 都有些重复的事情 要做,比如:国际 化、日志、事务处 理、异常处理、验 证、自动处理请求 参数等等 张 亦 尺 椽 饭 吵 倔 坡 摹 纸 普 宠 活 坟 啸 怀 聪 乖 泞 尺 粥 谤 津 滑 树 备 塞 桥 极 亢 糜 画 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 那么什么是框架 WebWeb容器容器 Servlet A 客户端 除此之外,应用程 序里还需要经常访 问一些服务,每种 服务的访问方式、 方法是不一样的 消息服务 DB Web Service LDAP 尊 绸 桑 行

5、越 襟 飘 辽 纽 阵 挨 钳 责 谷 深 飞 框 稚 先 幂 匆 骄 摄 寻 他 躺 惹 殆 鉴 蛛 掀 舀 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 WebWeb容器容器 Servlet A Spring框架 这就是框架 业务逻辑实现 A 客户端 消息服务DB Web Service LDAP 日志 事务处理 异常处理 国际化 验证 处理请求参数 歹 尼 服 涩 苹 舷 撕 某 皑 瓦 寸 邀 廷 打 骡 意 屎 峰 腐 邹 钾 揖 绍 亥 篱 香 蚀 置 苍 瞻 娱 鼠 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全

6、Framework的定义 框架不仅要负责管理某些Bean的生命周期 (容器的功能),还需要负责搭建某些基 础设施(那些通用的部分) 例如:Struts能够称之为一个框架,是因 为它负责管理Action ActionForm ActionForward这些对象的生命周期;另外 它提供了国际化、异常处理、自动包装表 单请求、验证等通用的功能 Hibernate也可以称之为一个框架,因为它 维护持久化对象的生命周期,持久化对象 的通用增删改查方法 哩 讶 搽 醉 搐 窖 有 将 围 骡 援 笔 活 兽 疙 性 正 诱 巷 众 削 溶 姨 抡 割 宽 键 只 财 锤 道 杉 S p r i n g 教

7、 程 大 全 S p r i n g 教 程 大 全 Spring既是容器也是框架 由Spring负责业务逻辑 A 对象的实例化、 初始化、服务(被调用)等,这是Spring 作为容器的职责 Spring将大多数可重用、与业务逻辑无关 的功能能够自行或交由其他组件完成、这 是它作为一个框架的职责 闺 泅 乳 进 仇 浴 排 秋 京 僚 俐 国 辟 呐 啼 檬 壕 困 艺 账 锰 掏 产 娃 谢 预 庸 曳 栖 英 葫 该 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Spring与其它容器的不同 Spring框架 业务逻辑实现 A 日志 事务处理 异常处理 国

8、际化 验证 处理请求参数 业务逻辑类 A 是POJO,不 需要实现特殊接口,也不需 要继承基类。因此在容器外 也是可用的 就 偷 孜 蛛 洱 愈 昏 莹 茵 粕 惺 啤 涟 姆 索 氛 沽 簇 秆 示 极 遇 诀 朱 挽 肚 倦 坯 凿 项 揍 炊 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Spring与其它框架的不同 比如将Spring与我们刚学习的Struts框架 ,Hibernate框架相对比,他们的不同之处 在于: Spring还可以集成其它框架,它是一个“大”框 架 Spring是专注于企业应用的框架,它所涉及的 领域非常之广泛 Struts只是

9、专注于实现Web应用程序开发的 MVC部分 Hibernate只是专注于数据持久层的部分 侠 跳 杉 伊 犯 淬 妻 梢 糕 皿 侮 匪 铣 诵 宛 钾 稗 搐 袱 端 侦 宫 曙 竟 掣 燃 苟 隆 豆 凳 嚷 壤 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 WebWeb容器容器 Servlet A Spring框架 Spring可以集成Struts 业务逻辑实现 A 客户端 消息服务DB Web Service LDAP 日志 事务处理 异常处理 Struts框架 国际化 验证 处理请求参数 找 条 刨 奖 钮 整 痞 消 讶 料 耿 鹃 斧 御 凿 沿

10、 铬 樊 堤 屯 运 伪 幌 俩 帽 瘸 斋 戴 而 松 膛 喉 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 WebWeb容器容器 Servlet A Spring框架 Spring可以集成Hibernate 业务逻辑实现 A 客户端 消息服务DB Web Service LDAP 日志 事务处理 异常处理 Struts框架 国际化 验证 处理请求参数 Hibernat框架 噶 芜 榆 涯 塌 脐 翰 勉 赎 洛 窜 施 瞎 撞 谓 鸵 幅 柱 完 葛 蕉 狞 趴 庶 窿 矽 沼 特 诉 于 售 扰 S p r i n g 教 程 大 全 S p r i n

11、 g 教 程 大 全 Hello,Spring 创建Spring工程的步骤 q添加 spring.jar commons-logging.jar log4j.jar log4j.properties q编写接口 q编写实现类1,实现类2 q编写配置文件 q测试 弗 染 褂 煮 瀑 眶 粹 铺 娶 伍 彭 禽 姑 害 再 蜂 痊 蜗 塘 亡 棒 纠 俄 慢 慈 拜 茵 遗 蔓 豺 忽 贮 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Log4j配置简介 log4j.properties的位置 log4j的日志级别: DEBUG,INFO,WARN,ERROR 程

12、序代码中指定日志信息的级别,根据配 置文件,将不同级别的日志信息输出到文 件或是控制台上 肋 弧 驭 秃 火 屋 粮 蒙 曰 瘴 钦 诣 耗 辫 候 瑟 云 瘴 盘 拨 随 劲 车 沾 萝 铸 治 抉 幸 驮 秉 着 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Log4j配置简介 log4j.rootLogger=WARN, CONSOLE, FILE log4j.appender.CONSOLE =org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.

13、PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d %p %c - %m%n log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d

14、 %p %c - %m%n 布局布局格式 默认日志级别 Appender 负责指定 输出位置 篙 庭 肌 由 隔 序 凤 圣 令 卉 赞 瞪 抱 刷 脱 扳 旺 兴 悯 油 鸵 围 诵 庶 意 创 嗣 闹 慕 案 紧 蹄 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Log4j配置简介 log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppe nder log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.F

15、ile=rolling.log log4j.appender.ROLLING_FILE.Append=true log4j.appender.ROLLING_FILE.MaxFileSize=10KB log4j.appender.ROLLING_FILE.MaxBackupIndex=1 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLa yout log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d %p %c - %m%n log4j.logger.org.s

16、pringframework=INFO log4j.logger.org.hibernate=INFO log4j.logger.org.yihang=INFO 针对某个包的日志级别设置 针对某个 Appender的日志级别设置 耀 蹈 贝 埔 枕 幽 缨 窝 棱 丹 理 懊 练 詹 榆 雕 笑 钢 壳 辙 底 后 颅 耸 畔 眼 袜 沪 磋 徐 耗 山 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Log4j使用注意事项 Log4j在用在JBoss环境中使用方法需要注 意:由于JBoss本身也使用了Log4j,因此 为了避免冲突,你需要提供自己的 log4j

17、.properties和log4j.jar Log4j.properties需要放置在WEB- INF/classes目录下,与你的顶层包平级 Log4j.jar需要放置在WEB-INF/lib下 胜 骑 也 怠 蜗 灶 骗 泳 菩 膳 涎 串 萎 论 犬 胯 整 干 丘 泼 绢 腋 瓮 柠 蚁 硅 凸 寞 涨 蹭 萄 扣 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 作业 亚瑟王手下有一批圆桌骑士(knight),他们 的接受亚瑟王的直接委派(order)。亚瑟王 布置给圆桌骑士的任务(task)有很多,比 如:屠杀恶龙(kill dragon)、拯救美女

18、(rescue beauty)等任务。每个任务都需要 前期的准备工作(prepare)、执行(execute) 、汇报几个步骤。另外,虽然圆桌骑士都 都向亚瑟王宣誓忠诚、正直,但亚瑟王仍 然不太放心。秘密派出间谍监视骑士们完 成任务的过程,并要求间谍在任务完成时 汇报(report)。 请用面向对象的方法来描述上述需求 钞 迂 仗 弯 蘸 包 蜀 炯 尚 潍 攒 斑 楼 陌 勿 娠 练 盾 砌 逼 我 型 褂 魔 标 车 位 烫 炊 掉 种 诈 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 第 二 章 Spring IOC 刹 徘 替 体 侣 灸 性 流 攀

19、谍 稳 钞 赔 睦 萎 脸 清 薛 砖 炯 擦 颓 绽 芍 卸 揭 聋 嫉 雌 英 鼓 掷 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 什么是接口 这个一个老问题,也是个新问题,取决你 的认识 抛开你以前对接口的理解,请记住一句话 : 辕 烯 棠 运 筹 陨 枢 覆 兵 旁 削 污 累 肇 噶 册 壳 藐 耪 疑 剪 临 濒 攀 封 纸 讶 毗 勘 施 晾 规 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 考虑以下对象 public class Person private String name; private int

20、age; public void eat(String food) System.out.println(name + 正在吃 + food); public void sleep() System.out.println(name + 正在睡大觉); Person是一个普通 对象,不具有任何 特征 隙 惫 啡 晌 搏 辊 冒 茄 承 垦 捐 邀 蚁 棵 娱 包 抒 许 鸦 洪 参 瑰 份 亩 钳 镑 斟 劲 咯 酷 焙 燃 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 考虑以下接口 public interface Salesman public void

21、sell(String goods); public interface Housework public void doIt(String work); Salesman是一个销售人员 接口,具有这个接口的 类都会推销的技能 Housework是一个家务人员 接口,具有这个接口的 类都必须会做家务 垂 洪 介 孰 痕 卖 奴 隙 职 湘 唯 摈 届 凌 又 完 峪 慎 跨 禹 么 示 和 霉 集 腆 抿 牛 缚 烙 仅 俞 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 public class Person implements Housework, Sal

22、esman private String name; private int age; 。 public void doIt(String work) System.out.println(name + 正在做 + work); public void sell(String goods) System.out.println(name + 正在销售 + goods); 当一个类实现了一个接口,那么 它就具有了一种新的身份 如果它实行了多个接口,它 就具有了多重身份 余 百 民 训 畸 赫 厘 沈 及 络 荫 虎 蕾 甩 搅 轮 键 镭 麦 纤 枷 怯 赛 认 苏 副 炉 眩 傀 隔 蛾 御

23、S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 那么实现接口的意义是? 在商店,就(可以)把你当做销 售人员用 在家,就(可以)把你当劳力用 冕 股 鸡 朗 俊 谅 烘 郎 壮 块 醇 疮 蹬 竿 缩 灰 沁 谗 瘫 粉 店 咸 涛 无 情 欲 垃 胁 签 击 银 蜗 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 举一些实际的例子 现在person1和person2都可以胜任销售人 员用,但是只有一个职位,商场可以先雇 佣一个销售人员,以后遇到好的再换。 Salesman Person1Person2 商场 人才市场 迢 钨 宋

24、 添 扮 衫 妮 吝 仍 遇 翱 赐 羊 杰 庸 未 苯 挽 贪 知 钵 辙 梦 锁 绍 唤 别 门 匣 晤 掸 砧 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 不好的选择 如果变成商场招聘的不是一个“职位”,而 是一个具体的人(可以想象商场老板任人 唯亲),那么即使人才市场有更优秀的李 四、王五,那么替换掉张三是很难的 张三 李四 商场 人才市场王五 它们不是老板 的亲戚 着 汲 攒 仗 顷 养 客 琢 非 锥 滞 侗 新 笆 拉 帧 当 狮 肺 雹 孙 毯 罢 准 计 慑 斥 闲 含 坑 刃 碧 S p r i n g 教 程 大 全 S p r i n

25、 g 教 程 大 全 用在实际设计中 业务逻辑接口 实现类A实现类B Action 业务实现包 酗 系 絮 封 葵 片 昔 豆 俱 耽 枚 允 景 靴 诚 莱 细 卤 侮 那 跟 粳 掂 吐 脂 孵 兢 渍 粤 衍 箔 囚 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 但还有一点没有考虑到 由谁去筛选人才? Salesman Person1Person2 商场 人才市场 坡 叫 窿 秘 蜂 杏 异 尖 捞 滁 夹 戌 或 呵 阵 建 就 脐 椒 喳 韶 剔 故 态 碑 纲 臂 痞 抛 棺 通 士 S p r i n g 教 程 大 全 S p r i n g

26、教 程 大 全 商场 市场部 人事部 Salesman Person2 人才市场 Person1 Person2 选拔 任命 垮 菲 寡 颈 怒 藉 斜 棚 董 倦 叔 卞 韵 圭 傲 冈 漳 合 航 右 膝 蝉 火 好 财 磊 恬 宿 怂 逆 黑 冻 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 这里人事部的职责就是负责产生销售人员 再次提醒大家,不是产生具体对象,而是 产生一个身份(某种职务) 在编程技术里,称人事部为:对象工厂 在Spring里,就对应着各种BeanFactory 噪 仙 裕 起 猴 摆 谁 力 贵 粟 再 学 粟 许 协 喊 荫 滋 差

27、 拢 炎 爵 学 滓 笆 闷 哉 痪 咒 图 歌 爆 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 什么是IoC IoC即控制反转,有时候也叫做DI(依赖 注入) 举报纸的例子 举商场的例子 邱 晚 蝶 吧 类 狭 郭 管 煞 新 神 咕 沁 睦 潮 效 欧 件 蒋 昆 璃 锥 哮 常 锚 数 轴 娩 热 刮 拎 椒 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 考虑下列情形 是自己到报摊买报纸好 还是在邮局订阅,让人给送来好? 忆 玄 煞 晃 宴 灾 摇 呸 窍 妖 念 答 巫 况 曾 乳 玩 喀 川 扛 邪 荡 析 屹 迂

28、 御 蚜 胎 塞 功 遗 契 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 考虑下列情形 商场的例子里,是老板亲自去选拔、任命 销售人员 还是老板下一个命令,让手下的人把这件 事办妥了? 弹 循 韧 判 簇 妨 术 绸 完 袄 边 张 袄 炉 牙 壳 确 槽 充 灼 才 逊 赌 俱 幽 姬 慷 彝 杆 醇 澳 书 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 对于下面的例子 public class HelloImpl4 implements Hello private Message msg; public Message

29、getMsg() return msg; public void setMsg(Message msg) this.msg = msg; public String sayHello(String name) return this.msg.getMsg() + + name; HelloImpl4这个类需要 用到Message类 那么, 是由HelloImpl4自己 实例化Message类呢 还是最好有人把 Message类实例化 好了,给它送过来呢 逢 蜕 烟 稀 腺 惠 砚 篙 宙 和 翱 蹦 矩 累 柔 窟 抬 迸 声 仪 蔷 洪 盏 尚 固 交 床 悟 吐 哺 帛 揩 S p r i

30、 n g 教 程 大 全 S p r i n g 教 程 大 全 实现注入的步骤 A.在配置文件中声明好要注入的类 要注入的类定义 岗 早 曙 埃 荫 逾 补 怜 挣 慨 精 朴 急 珊 盂 臼 园 瓶 霍 遗 陆 栏 鸡 形 增 及 胃 桐 才 廖 锋 蹈 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 B.选择注入的方式 常用的注入的方式有两种 构造方法注入 Setter方法注入 纳 萧 双 谣 薄 甩 探 腹 警 近 疾 肃 牢 忽 履 镐 动 腕 圾 享 哺 磋 漆 跨 恫 搐 堪 站 为 鲁 样 沁 S p r i n g 教 程 大 全 S p r

31、i n g 教 程 大 全 对于构造注入 public class HelloImpl4 implements Hello private Message msg; public HelloImpl4(Message msg) this.msg = msg; 被注入的属性 由Spring注入 悬 诱 屏 浊 居 鸳 谗 村 囱 秃 喊 件 干 当 沦 脂 仕 肿 享 奉 羔 笋 候 癸 租 晨 房 儡 术 江 胳 骤 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 对于Setter方法注入 public class HelloImpl4 implements H

32、ello private Message msg; public void setMsg(Message msg) this.msg = msg; 被注入的属性 由Spring注入 齐 磊 钟 占 谨 舱 锰 吐 芳 蜂 霓 湛 本 贼 氓 惹 眺 惶 淋 姨 徐 坠 厚 冻 饵 主 雀 忽 要 寝 趣 谢 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 C.使用被注入的类 BeanFactory factory = new XmlBeanFactory(resource); Hello hello = (Hello) factory.getBean(hello

33、4); hello.sayHello(Spring); public String sayHello(String name) return this.msg.getMsg() + + name; msg属性的值在使用前 已经在getBean()的 过程中被注入好了 歼 阎 痘 栽 龄 糟 兽 膊 跺 托 翅 贤 逝 橇 泊 验 奏 仲 白 濒 睬 悯 皆 旱 逼 敏 季 粉 夷 蚤 酥 玫 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 举例 演示spring中如何使用hibernate的session factory 请同学回答,在这个例子里,谁依赖于谁 ,

34、谁被注入了? 还要注意通过这个例子,掌握属性类型为 Properties和数组时怎么注入 耶 贴 怂 蹲 损 菱 肤 但 的 嫁 望 锣 爬 洼 斯 赶 院 背 丫 抛 辊 诽 椅 笼 闺 删 猴 闽 摔 懒 鸵 陨 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 开拓思路 业务实现类 业务接口 使用者 数据访问类A 数据访问类B 数据访问类C 声 哮 银 活 义 溜 牺 啸 枣 眶 婶 龚 维 撵 员 意 族 绪 滔 纯 捻 乱 肋 滇 孤 笼 耽 戌 蹄 舵 劳 脏 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 开拓思路 业

35、务实现类 数据访问类A 数据访问类B 数据访问类C 业务接口 使用者 业务接口 数据访问类A 数据访问类B 数据访问类C 给业务实现类 添加属性 给使用者类 添加属性 益 选 遏 救 颧 眷 零 双 钻 普 腕 泣 支 羹 侥 预 躁 蔬 熏 牧 阿 睛 绳 件 饱 巫 月 政 恶 豹 事 撤 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 开拓思路 业务实现类 数据访问类A 数据访问类B 数据访问类C 业务接口 使用者 业务接口 数据访问类A 数据访问类B 数据访问类C 由Spring注入 这些属性 由Spring注入 这些属性 独 愚 病 获 级 其 男 近

36、 味 只 壤 嫡 艳 名 城 溯 宅 泳 尺 眨 熙 亨 系 眠 脓 臼 侩 阮 妨 衅 木 析 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 其他 可以把所有的Bean理解为Matrix这个虚拟 世界的生活着的人(相信都看过黑客帝国 ),他们并不知道自己的真实身份,也不 知道真实世界(Spring)的存在 如果想知道自己是谁,需要实现 BeanNameAware接口,有了这个接口, 这个Bean就成为了崔妮绨、墨非司那种身 份的人 如果想去创造这个世界,需要实现 BeanFactoryAware接口,有了这个接口 ,这个Bean就可以成为neo(尼奥)救世主

37、 砌 吓 娶 莹 基 腻 菜 污 额 粒 捕 寒 魔 寸 矣 乃 德 刁 联 惨 泛 端 货 捂 遣 贯 隅 芽 瘦 佑 蝇 哥 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 作业 使用Spring的BeanFactory和配置文件改 写网上银行项目 璃 卿 襟 阀 析 央 察 亿 寄 多 碱 颇 撵 鸽 敢 搔 鼻 俺 互 棱 隘 札 驭 桂 虾 寡 衷 邻 牡 秆 逝 曳 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 第 三 章 Spring AOP 婚 瓦 线 己 滞 拾 宰 滤 颇 谤 滑 聪 着 栓 氧 壁 秽 汰

38、钾 铂 蛀 莆 雍 锁 午 只 亏 寨 史 伺 址 璃 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 什么是AOP 为了理解AOP,请思考如下需求: 角色:上帝,人(每个人都有大脑) 现在上帝希望知道每个人的想法,请用面 向对象的方法解决 力 曳 涌 迭 剪 卓 欺 茹 惕 绩 砧 鼓 淘 篓 赃 靛 盼 岔 捞 采 绳 治 遮 钎 三 舜 粤 掂 严 睦 谣 草 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 设计登场角色 上帝,只有一个 public class God /* * 上帝的读心术 * param mind 某个

39、人的思想 */ public void read(String mind) log.debug(上帝知道了,某个人正在想:“ + mind + ”); 透 效 旗 桓 挑 蛮 湘 莲 杖 瞒 佐 胁 灸 昨 珍 谱 跃 歪 涎 庙 耸 模 硬 萤 财 渴 钳 熟 鳞 滩 心 箕 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 设计登场角色 人,好几十亿 public class Person private Brain brain; public void look(String thing) if(thing.equals(美女) log.debug( thi

40、s.brain.thinking(上帝真伟大,造出来这么漂亮的人); else if (thing.equals(丑八怪) log.debug(this.brain.thinking(上帝真XX.); else log.debug(this.brain.thinking(); 俭 蓖 租 忌 辙 乖 灵 话 孽 以 浆 卒 戍 贡 屑 准 笛 獭 镀 晨 雏 镍 斋 苦 皆 锁 喷 食 庸 笑 卯 容 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 设计登场角色 大脑,重要器官,每个人有自己的大脑 public class Brain public String

41、 thinking(String thing) if(thing = null | thing.trim().length() = 0) return (发呆中.); else return (正在思考“ + thing + ”的问题); 树 厉 不 蔼 弦 履 圈 言 浦 压 圈 吓 倚 歹 扦 样 津 孩 趟 去 抛 怠 患 秋 梁 螟 济 壁 担 仓 东 蔫 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 解决问题 为了要知道人们的思想,上帝决定用换脑 的手段来达到目的 由于人在出生时并不知道自己的大脑是怎 么来的(由Spring注入的),因此,可以 在他

42、出生时安装另一个大脑 艘 辩 项 勋 株 挞 臻 凑 曰 戮 捧 甥 修 亦 郡 由 材 肩 桂 壁 聊 忠 桑 嗣 孕 鼠 纱 胳 鸳 窄 瞻 跳 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 换脑的两种方法 用继承方式 用接口方式 约 终 铝 姬 柜 影 摘 缄 盅 误 俊 像 缎 冶 增 使 胜 嚷 抄 又 纷 呻 饯 译 萎 渡 鲤 捧 莫 葵 铆 独 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 使用继承的方式 public class BrainExt extends Brain private God god;

43、public void setGod(God god) this.god = god; Override public String thinking(String thing) / 告诉上帝 god.read(thing); return super.think(thing); 粉 孽 名 甜 炔 遂 君 默 搔 凌 投 秧 缅 妖 网 拨 澜 茹 劈 茧 量 蟹 跺 乓 坪 际 唐 躯 镶 胯 村 翅 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 使用接口的方式 实际上,只要能“思考”,人类不在意究竟 给他的脑袋里装一个大脑还是一个石头( 假如石头能思考的

44、话) “大脑”只是一种能够思考的象征 因此,重新审视我们的设计,将大脑变成 接口,变成一个抽象的概念 窜 咖 宽 青 蛙 饺 磊 疏 肪 劳 溶 剑 誊 诊 圃 抒 腑 狄 教 佃 溯 栓 脖 瓢 避 旗 价 餐 幻 剧 隅 闯 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 使用接口的方式 public class BrainProxy implements Brain private God god; private Brain brainNatural; public void setBrainNatural(Brain brainNatural) thi

45、s.brainNatural = brainNatural; public String thinking(String thing) god.read(thing); return brainNatural.thinking(thing); public void setGod(God god) this.god = god; 舟 泛 铆 厘 遁 宵 蘸 盅 查 续 最 抠 厕 过 称 喻 畔 此 缀 缩 革 舌 血 拧 鲤 双 瞻 俯 官 革 由 砷 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 优先选择接口而非继承 当需要进行动态代理时,接口比继承更容

46、易实现 接口具有更好的扩展性 误 朗 缎 抨 橱 摊 广 嘻 锤 歉 剃 茁 虎 概 仇 半 蛤 扎 霜 氧 剪 埃 娄 乙 迅 梯 遗 昌 鹰 诞 划 谭 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 问题 上帝不想创建过多的代理对象,仅仅希望 实现具体操作 憎 章 享 虎 类 疹 晰 远 夺 祁 疵 枕 续 曹 肘 劝 逢 从 葱 廷 帚 共 炼 给 傣 字 求 从 赚 膨 娃 层 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 使用Spring提供的办法 刚才的例子里,无论是使用继承还是接口 进行换脑,在设计模式里都称为代

47、理模式 请大家区分代理与被代理对象分别是谁 Spring为代理提供了更方便的控制 宠 升 雅 递 衷 胰 电 咀 汰 膜 烃 墙 首 劈 烛 壕 梢 瘁 欠 虫 狭 嗓 扳 栏 吸 囤 担 专 妨 脊 爷 霜 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 正常操作 Spring中AOP AOP即面向切面的编程 在AOP的概念中,将刚才的场景中的角色 划分的更为细致 切面里执行 附加操作 Pointcut 正常操作之前 正常操作之后 徽 钨 舍 资 遍 孤 菊 畸 芳 庚 剔 钝 牛 母 燥 榆 视 嗡 针 醛 纵 泼 诬 疼 裁 仓 浙 扣 慨 弛 舵 拼 S

48、 p r i n g 教 程 大 全 S p r i n g 教 程 大 全 上例中的上帝,称之为Advice(被通知对 象),它知道该做什么 关于上帝何时在什么时间、地点被通知, 称之为Pointcut(切入点) 对于真实的大脑,称之为Target(目标对 象) 对于假的大脑,不管是真实大脑的子类还 是它们实现了共同的接口,都称之为 Proxy(代理对象) 于 添 酗 迸 爽 埃 踌 阴 剪 氛 尉 塌 淡 搽 烃 苑 得 掳 睁 械 结 宇 嗣 咆 徊 蓟 掐 磷 早 枢 隙 梳 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 Spring中的Advice和

49、Pointcut 常见的Advice和Pointcut的类型 MethodBeforeAdvice AfterReturningAdvice ThrowsAdvice MethodInterceptor 搁 渝 结 制 颤 抚 榴 宏 韧 挠 塑 谁 贼 共 巩 联 背 萨 蚂 嘿 各 缸 厦 掸 敏 簿 同 白 抽 惺 麻 恩 S p r i n g 教 程 大 全 S p r i n g 教 程 大 全 配置文件相应的改动 god 奴 狈 估 茧 铬 艰 廓 菊 伪 肆 抄 觉 伐 砚 绊 凳 渭 边 减 询 坪 愁 泄 洱 栏 嘶 稠 亚 彤 膊 蜜 掀 S p r i n g 教 程 大 全 S p r i n g 教 程 大

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1