基于XML配置的AOP

AOP的基本操作

先引入jar包  :spring-context aspectjweaver
1.把通知Bean交给spring管理
2.使用aop:config标签表明开始aop配置
3.使用aop:aspect标签表明配置切面
           (1)id属性为切面提供一个唯一表示
           (2)ref属性来指向通知类bean的id
    在aop:aspect标签内 使用aop:before表示前置通知(相应aop:after指定后置通知)
           (1) method属性表明该类哪个方法是前置通知
           (2)pointcut属性指定切入点表达式,该表达式用来指定对哪个方法进行增强
                  aop:pointcut标签可用来指定方法,这样 具体的切面指定的时候直接引用aop:pointcut标签中的id即可
          切入点表示式:
          关键字 execution(表达式)
          表达式:修饰符  返回类型  方法路径 (public void com.qst.service.impl.AccountService.saveAccount)
           补充:
           访问修饰符可以省略
           返回值可以使用通配符*,表示任意返回值
           包名也可使用通配符*,表示任意包,有几个包就需要写几个*.
           包名可以使用.. 表示当前包及其子包
           类名和包名都可以使用*来实现通配  *()
           方法的参数列表 可以指定 基本类型直接写名称 引用类型包名.类名 java.lang.String  这里的*表示所有带参数的 如果想用无参的用(..)


           public void com.qst.service.impl.AccountService.saveAccount()
            全通配写法 * *..*.*(..)
 <!--把service放入IOC容器中-->
    <bean id="accountService" class="com.qst.service.impl.AccountService"></bean>

    <!--把logger类放入IOC容器中-->
    <bean id="logger" class="com.qst.utils.Logger"></bean>

    <!--配置AOP-->
    <aop:config>
        <!--配置切面指定类-->
        <aop:aspect id="logAdvice" ref="logger">
            <!--配置切面指定类的方法及要切入的类的方法(切入点)-->
            <aop:before method="beforelog" pointcut-ref="pt1"></aop:before>
      
            <aop:pointcut id="pt1" expression="execution(public void com.qst.service.impl.AccountService.*(..))"></aop:pointcut>
        </aop:aspect>

    </aop:config>

</beans>

四种常用的通知类型

 

前置通知aop:before 指定切入点之前执行
后置通知aop:after-returning指定切入点之后执行
异常通知aop:after-throwing指定切入方法异常时执行
最终通知aop:after不管有无异常都必须执行
  <!--配置AOP-->
    <aop:config>
        <!--配置切面指定类-->
        <aop:aspect id="logAdvice" ref="logger">
            <!--配置切面指定类的方法及要切入的类的方法(切入点)-->
            <aop:before method="beforelog" pointcut-ref="pt1"></aop:before>
            <aop:after method="afterlog"  pointcut-ref="pt1"></aop:after>
            <aop:after-returning method="afterReturnlog"  pointcut-ref="pt1"></aop:after-returning>
            <aop:after-throwing method="throwtlog"  pointcut-ref="pt1"></aop:after-throwing>
            <aop:pointcut id="pt1" expression="execution(public void com.qst.service.impl.AccountService.*(..))"></aop:pointcut>
        </aop:aspect>

    </aop:config>

 

环绕通知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值