SpringAOP讲解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SpringAOP讲解

面向切(方)面编程 AOP概念 AOP:Aspect Oriented Programming(面向切面编程或面向方面编程),是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP)。 AOP为开发者提供一种进行横切关注点(比如日志关注点横切了支付关注点)分离并织入的机制,把横切关注点分离,然后通过某种技术织入到系统中,从而无耦合的完成了我们的功能。 面向切面的编程和面向对象并不矛盾,是对面向对象的思维方式的有效补充。主要将程序中涉及公共问题集中解决,可以解决面向对象和过程化方法中不能很好解决的横切问题如:事务,安全,日志,异常处理等横切关注。 利用动态代理实现面向切面编程 代理: 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。按照代理类的创建时期,代理类可分为两种。 静态代理类: 由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。动态代理类:在程序运行时,运用反射机制动态创建而成。 定义追求班花的方法: /** * 定义的接口 * * @author Administrator * */ public interface IGiveSomething { void giveMoney(); // void giveCar(); void giveSeaHouse(); } 实现接口的方法: /** * SuperMan 符合大家口味 追求者 * * @author Administrator * */ public class SuperMan implements IGiveSomething { private ClassFlower cf; public ClassFlower getCf() { return cf; } public void setCf(ClassFlower cf) { this.cf = cf; } public SuperMan(ClassFlower cf) { this.cf = cf; } @Override public void giveSeaHouse() { System.out.println(华哥 送给女生 + cf.getName() + 一栋海景房~~~); } @Override public void giveMoney() { System.out.println(华哥 送给女生 + cf.getName() + 100亿~~~); } } 代理类的具体实现: public class Proxy implements IGiveSomething { private SuperMan superman; public SuperMan getSuperman() { return superman; } public void setSuperman(SuperMan superman) { this.superman = superman; } // 我们做华哥的代理 public Proxy(SuperMan sm) { this.superman = sm; } @Override public void giveSeaHouse() { System.out.println(这是在调用华哥的方法之前完成的事情); // 此处虽然实现 giveSeaHouse这个方法 实际上市帮华哥做这件事情 // 要调用的是 华哥对象的方法 superman.giveSeaHouse(); System.out.println(这是在调用华哥的方法之后完成的事情); } @Override public void giveMoney() { superman.giveMoney(); } } 测试类: /** * 测试类 * @author Admi

文档评论(0)

33ggoup + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档