spring 2.0里AOP概念入门

本文介绍如何利用 Spring AOP 实现业务方法的事务管理。通过定义事务切面类,包括开启、提交及回滚事务的方法,并在配置文件中指定切入点表达式,实现了对转账方法`transfer`的事务控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为工作用不到,好久没有关注spring了.周末看了下spring aop,感觉还不错.
假定想通过aop实现transaction,一些核心得概念如下:
target object, //业务对象
    ||
    ||-------->//这个过程叫 weaving,spring框架在运行时完成的
    ||
    //
AOP proxy,     //具备事务特性的业务对象
假定某个业务对象,比如提款机好了,叫 com.jh.Teller,它有一个方法叫transfer
class Teller {
  boolean transfer(Accout from, Accout to, double howmuch) {
   withdraw(from, howmuch);
        deposit(to, howmuch);
  }
}
如何让" transfer"这个方法在一个" 事务中"执行呢?
这里就引出三个概念:
transfer -> Joinpoint( pointcut可以看作是一个用来匹配joinpoint的正则表达式,
                      比如get*()会匹配getName())
事务     -> Aspect
用spring来实现这个aspect大概就是如下这个样子
public class TransactionAspect {
  void beforeBusiness() {
    //open transaction...
  }
  void afterBusiness() {
    //commit transaction...
  }
  void afterExcetion() {
    //rollback transaction
  }
}
像事务管理这类玩意,他们在每一个业务的前,后执行.
重复,但是又没办法使用OO的方法把这种重复去掉.这就是crosscutting concern的意思
把如上像beforeBusiness(),afterBusiness() 这类在aspect里定义的方法叫做 advice,
用来指定当一个joinpoint出现时应该采取的行动.
综合上面的, 在spring的配置文件里一个基于描述性的事务看起来应该是如下样子:
<aop:config>
  <aop:aspect id="transactionAspect" ref="transactionAspectBean">
    <aop:pointcut id="transactionalMethod" expression="execution(* com.jh.*Service.*(..))"/>
    <aop:before pointcut-ref="transactionalMethod" method="beforeBusiness"/>
    <aop:after  pointcut-ref="transactionalMethod" method="afterBusiness"/>
    <aop:after-exception pointcut-ref="transactionalMethod" method="afterException"/>
  </aop:aspect>
</aop:config>
大致是这个样子,具体参考spring的手册.
到这里为止spring aop里面的一些概念就都在了.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值