网站大量收购闲置独家精品文档,联系QQ:2885784924

必威体育精装版基于开源框架的企业级信息系统开发技术.ppt

必威体育精装版基于开源框架的企业级信息系统开发技术.ppt

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

5.4 Spring AOP OOP——Modularity Modularity in Reality URL pattern matching——Pretty Good Modularity Code from 5.4 Spring AOP OOP——Modularity Modularity in Reality Logging——Bad Modularity Code from 5.4 Spring AOP Limitations of OOP 5.4 Spring AOP AOP的全称为Aspect Oriented Programming,译为“面向方面编程”或“面向切面编程”,与熟悉的OOP思想所关注的目标有本质上的区别,AOP是针对具体业务领域、业务逻辑;OOP针对业务对象。 5.4.1 从代理机制初探AOP 来看一个简单的例子,当需要在执行某些方法时留下日志信息,可能会这样写: 在HelloSpeaker类中,当执行hello()方法时,程序员希望该方法执行开始与执行完毕时都留下日志。最简单的做法是用上面的程序设计,在方法执行的前后加上日志动作。 import java.util.logging.*; public class HelloSpeaker{ pirvate Logger logger=Logger.getLogger(this.getClass().getName()); public void hello(String name){ logger.log(Level.INFO, hello method starts…); // 方法开始执行时留下日志 Sytem.out.println(hello, +name); // 程序的主要功能 Logger.log(Level.INFO, hello method ends…); // 方法执行完毕时留下日志 } } 5.4.1 从代理机制初探AOP 思考:上面这种方式会有什么弊端? 语句重复 不能灵活应对各种“变化” 解决办法? 可以使用代理(Proxy)机制来解决这个问题,有两种代理方式:静态代理(static proxy)和动态代理(dynamic proxy)。 代理模式的思想是:不让外部直接访问具体目标,而是通过一个代理类才能访问具体目标。类似在具体目标与外部之间放置一道“隔离层”,所有与具体目标的通信均需通过这道“隔离层”来传送请求和返回状态。这样“隔离层”就能掌控访问具体目标的前前后后。如果我们需要在访问具体目标前或后加上一致的处理逻辑,无疑代理模式最为适合。就如日志管理、安全控制、事物管理。 5.4.1 从代理机制初探AOP 静态代理 在静态代理的实现中,代理类与被代理的类必须实现同一个接口。在代理类中可以实现记录日志等相关服务,并在需要的时候再呼叫被代理类。这样被代理类就可以仅仅保留业务相关的职责了。 举个简单的例子,首先定义一个IHello接口: 然后让实现业务逻辑的HelloSpeaker类实现IHello接口,HelloSpeaker.java代码如下: public class HelloSpeaker implements IHello{ public void hello(String name){ System.out.println(hello,+name); } } public interface IHello{ public void hello(String name); } 5.4.1 从代理机制初探AOP 静态代理 在HelloSpeaker类中没有任何日志的代码插入其中,日志服务的实现将被放到代理类中,代理类同样要实现IHello接口。HelloProxy.java代码如下: public class HelloProxy implements IHello{ private Logger logger=Logger.getLogger(this.getClass().getName()); private IHello helloObject; public HelloProxy(IHello helloObject){ this.helloObject=helloObject; } public void hello(String name){ log(hello method starts…); // 日志服务 helloObject.hello(name);

文档评论(0)

文档资料 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档