Spring的AOP

Spring AOP,借助于Spring实现的拦截器,开发者能够实现以声明的方式使用企业级服务,比如安全性服务、事务服务等。Spring IoC和 Spring ; AOP组合,一起形成了Spring,这样一个有机整体,使得构建轻量级的J2EE架构成为可能,而且事实证明,非常有效。没有Spring IoC的Spring AOP是不完善的,没有Spring AOP的Spring IoC是不健壮的。

通常,系统由很多组件组成,每个组件负责一部分功能,然而,这些组件也经常带有一些除了核心功能之外的附带功能 。系统服务如日志、事务管理和安全经常融入到一些其他功能模块中。这些系统服务通常叫做交叉业务,这是因为它们总是分布在系统的很多组件中。通过将这些业务分布在多个组件中,给我们的代码引入了双重复杂性。

1.实现系统级业务的代码在多个组件中复制。这意味着如果你要改变这些业务逻辑,你就必须到各个模块去修改。就算把这些业务抽象成一个独立模块,其它模块只是调用它的一个方法,但是这个方法调用也还是分布在很多地方。

2.组件会因为那些与自己核心业务无关的代码变得杂乱。一个向地址录中添加条目的方法应该只关心如何添加地址,而不是关心它是不是安全或支持事务的。

此时,我们该怎么办呢?这正是AOP用得着的地方。AOP帮助我们将这些服务模块化,并把它们声明式地应用在需要它们的地方,使得这些组件更加专注于自身业务,完全不知道其它涉及到的系统服务。

目前,Spring只支持方法级的连接点。这和一些其他AOP框架不一样,如AspectJ和JBoss,它们还提供了属性接入点,这样可以防止你创建特别细致的通知,如对更新对象属性值进行拦截。然而,由于Spring关注于提供一个实现<ahref="http://dev.21tx.com/java/j2ee/"><fontcolor=#ba8981>J2EE</font></a>服务的框架,所以方法拦截可以满足大部分要求,而且Spring的观点是属性拦截破坏了封装,让Advice触发在属性值改变而不是方法调用上无疑是破坏了这个概念。

使用方法就是写一个类,实现前,后,环绕等等方法即可,然后配置到xml中,制定那些类需要使用此aop,用哪些方法,比如:

  1. <aop:config>  
  2.         <aop:aspect id="TestAspect" ref="aspectBean">  
  3.             <!--配置com.spring.service包下所有类或接口的所有方法-->  
  4.             <aop:pointcut id="businessService"  
  5.                 expression="execution(* com.spring.service.*.*(..))" />  
  6.             <aop:before pointcut-ref="businessService" method="doBefore"/>  
  7.             <aop:after pointcut-ref="businessService" method="doAfter"/>  
  8.             <aop:around pointcut-ref="businessService" method="doAround"/>  
  9.             <aop:after-throwing pointcut-ref="businessService" method="doThrowing" throwing="ex"/>  
  10.         </aop:aspect>  
  11.     </aop:config>
当然这种是比较繁琐了,现在都用基于注解的方式来实现。@Aspect


例子可以参见http://www.360doc.com/content/10/1215/11/4957029_78291485.shtml,http://pandonix.iteye.com/blog/336873

更全面的:http://docs.huihoo.com/spring/zh-cn/aop.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值