Spring AOP 入门学习

原创 2007年10月08日 19:51:00

    尽管用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,但仍然能达到类似的效果,还算不错,但日志记录却完全分散个不同的类中,感觉有些乱,且不好控制,事务处理则完全没有考虑,汗滴了。。。。

再看看吧,试了几个例子再说。 

Spring AOP入门——概念及注意点

Spring AOP入门——概念及注意点
  • u012345283
  • u012345283
  • 2014年08月20日 09:15
  • 1842

spring框架学习(六)AOP

AOP(Aspect-OrientedProgramming)面向方面编程,与OOP完全不同,使用AOP编程系统被分为方面或关注点,而不是OOP中的对象。    AOP的引入  在OOP面向对象的使用...
  • lishuangzhe7047
  • lishuangzhe7047
  • 2014年03月15日 23:36
  • 51274

Spring学习总结——Spring实现AOP的多种方式

 目录 一、基于XML配置的Spring AOP二、使用注解配置AOP三、AspectJ切点函数四、AspectJ通知注解五、零配置实现Spring IoC与AOP六、示例下载 ...
  • u010987379
  • u010987379
  • 2016年08月08日 16:13
  • 32990

spring从入门到上手-AOP

Spring课程 1 Spring基本特征 Spring是一个非常活跃的开源框架;它是一个基于Core来构架多层JavaEE系统的框架,它的主要目地是简化企业开发. Spring以一种非侵入式的...
  • u010923921
  • u010923921
  • 2015年04月16日 11:00
  • 1966

Spring AOP 学习的好例子 仔细理解一定能学会的!

第一次写博客!心情还是蛮激动的! 虽然水品一般!但是我是知识的传播者!希望能把好的文章分享给大家!       好了,言归正传,开始我们的  spring aop 的开心学习之旅吧!      本文转...
  • u011225629
  • u011225629
  • 2015年04月22日 11:11
  • 5312

Spring学习总结(4)——Spring AOP教程

一、概念 AOP(Aspect Oriented Programming):面向切面编程。 面向切面编程(也叫面向方面编程),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用...
  • u012562943
  • u012562943
  • 2015年11月16日 15:35
  • 1868

使用Spring的注解方式实现AOP入门

首先在Eclipse中新建一个普通的Java Project,名称为springAOP。为了使用Spring的注解方式进行面向切面编程,需要在springAOP项目中加入与AOP相关的jar包,spr...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月20日 00:28
  • 4129

Spring aop--几种不同的使用方式

最近听老师讲关于AOP关于容器的课,突然觉得之前对aop的理解都不是很到位,先不说理解就是应用都很少,最近也写了几篇关于AOP的博客,都是一些简单的demo,今天在这里再说一下关于Spring A...
  • jly4758
  • jly4758
  • 2015年05月31日 17:48
  • 7839

深入理解Spring AOP之基本概念

深入理解Spring AOP之基本概念 AOP到底是什么 Spring AOP和IOC是听到的关于Spring最频繁的两个词了。现在来重点关注AOP这个...
  • yujin753
  • yujin753
  • 2015年06月29日 22:30
  • 4760

Spring MVC中AOP无效、不起作用,解决方案之一

最近由于项目原因,在Spring+SpringMVC+Mybatis的环境中,增加对controller或是service的日志监控,在网上搜了半天,按照SpringAop的配置出不了结果,在按照网上...
  • tianjun2012
  • tianjun2012
  • 2015年08月20日 17:06
  • 13607
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring AOP 入门学习
举报原因:
原因补充:

(最多只允许输入30个字)