Spring AOP 入门学习

导读:
  尽管用Spring开发了一段时间,但仅仅使用了其IoC容器与MVC功能,对于AOP与事务管理涉猎甚少。
  今天看了一下AOP方面的东西,其描述似乎确实能够解决常见的几个头疼的问题:日志记录、错误处理、与权限控制。这类问题称之为crosscutting需求,是指在一个程序中影响(横切)其它关系的Aspect(横切其它核心关系的部分)。这些关系通常在设计和实现时都不能和系统的剩余部分被清晰地分解出来,从而导致发散的、混乱的或者既发散又混乱的程序。
  这个图还是挺形象的。
  
  
  三个服务CourseService、StudentService以及MiscService都属于服务层,实现应用程序的业务逻辑,而这三个服务都需要安全控制、事务管理以及其他的共同需求等。这些需求与服务相依赖,但又横穿所有的服务。
  引用一下夏昕对OOP与AOP比较的描述:
  OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。
  举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP对一个动作进行封装,则有点不伦不类。
  换而言之,OOD/OOP面向名词领域,AOP面向动词领域。
  AOP和OOD/OOP并不冲突,我们完全可以在一个应用系统中同时应用OOD/OOP和AOP设计思想,通过OOD/OOP对系统中的业务对象进行建模,同时通过AOP对实体处理过程中的阶段进行隔离处理。即使不是OOD/OOP,而是在传统的POP(面向过程编程)中,AOP也能起到同样的作用。
  
  看了几个简单的例子,对如何采用AOP来实现crosscutting需求有了一定的了解,在调用所有符合指定要求的方法时,在适当的地方(方法之前,之后或抛出异常时)加入指定的控制代码,这段控制代码是经过抽象了的,集中的,并能与调用方法完全分离。但甚为浮浅,远远不够。比如对日志处理而言,可以将很多本应分散在不同类中的操作信息放在同一个方法中进行,但如何保证不同操作对应的不同的记录信息呢?
  看了一下自己没有采用AOP的解决过程。将Spring的Controller与SimpleFormController的通用行为进行抽象后,权限控制与错误处理都能够集中在一起处理,即使没有采用AOP,但仍然能达到类似的效果,还算不错,但日志记录却完全分散个不同的类中,感觉有些乱,且不好控制,事务处理则完全没有考虑,汗滴了。。。。
  再看看吧,试了几个例子再说。
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1815807
  [收藏到我的网摘] [发送Trackback] kofsky发表于 2007年10月08日 19:50:46

本文转自
http://blog.csdn.net/kofsky/archive/2007/10/08/1815807.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值