基于xml配置的AOP

目录

xml方式AOP快速入门

xml方式AOP配置详解


xml方式AOP快速入门

xml方式配置AOP的步骤

  1. 导入AOP相关坐标
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>

    2.准备目标类,准备增强类,并配置给Spring管理

    3.配置切点表达式(哪些方法被增强)

    4.配置织入(切点被哪些通知方法增强,是前置增强还是后置增强)

    <aop:config>
<!--        配置切入点  目的是指定哪些方法增强-->
        <aop:pointcut id="myPointCut1" expression="execution(void com.hsf.service.Impl.UserServiceImpl.show01())"/>
<!--        配置织入 目的是要执行哪些切入点与通知结合-->
        <aop:aspect ref="advice">
<!--          配置前置增强  -->
            <aop:before method="beforeAdvice" pointcut-ref="myPointCut1"></aop:before>
        </aop:aspect>

    </aop:config>

 

xml方式AOP配置详解

切点表达式的配置方式

1.

<aop:config>
<!--        配置切入点  目的是指定哪些方法增强-->
        <aop:pointcut id="myPointCut1" expression="execution(void com.hsf.service.Impl.UserServiceImpl.show01())"/>
<!--        配置织入 目的是要执行哪些切入点与通知结合-->
        <aop:aspect ref="advice">
<!--          配置前置增强  -->
            <aop:before method="beforeAdvice" pointcut-ref="myPointCut1"></aop:before>
        </aop:aspect>

    </aop:config>

 2.

<aop:before method="beforeAdvice" pointcut="execution(void com.hsf.service.Impl.UserServiceImpl.show01())"></aop:before>

 切点表达式的配置语法

 

  • 访问修饰符可以省略不写

  • 返回值类型,某一级包名,类名,方法名可以使用*表示所有

  • 包名与类名之间使用单点,表示该包下面的类,使用双点..表示该包及其子包下的类

  • 参数列表可以使用两个点..表示任意参数

通知的类型

 

        <aop:aspect ref="advice">
<!--          配置前置增强  -->
            <aop:before method="beforeAdvice" pointcut="execution(void com.hsf.service.Impl.UserServiceImpl.show01())"></aop:before>
            <aop:after-throwing method="error" pointcut-ref="myPointCut1"></aop:after-throwing>
            <aop:after-returning method="afterAdvice" pointcut="execution(void com.hsf.service.Impl.UserServiceImpl.show01())"></aop:after-returning>
            <aop:around method="arround" pointcut-ref="myPointCut1"></aop:around>
            <aop:after method="nessccrsy" pointcut-ref="myPointCut1"></aop:after>
        </aop:aspect>
    public Object arround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("环绕前通知");
        Object res = proceedingJoinPoint.proceed();
        System.out.println("环绕后通知");
        return  res;
    }

 

 

    public void beforeAdvice(JoinPoint joinPoint){
        System.out.println(joinPoint.getTarget());
        System.out.println("前置的增强");
    }

 

      <aop:after-throwing method="error" pointcut-ref="myPointCut1" throwing="e"></aop:after-throwing>

 

  • AOP的配置的两种方式

    • 使用<advisor>配置切面

    • 使用<aspect>配置切面

    Spring定义了一个Advice接口,实现该接口的类都可以作为通知类出现

<aop:advisor advice-ref="myadvice2" pointcut-ref="myPointCut1"></aop:advisor>

 

package com.hsf.advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;


import java.lang.reflect.Method;

public class Myadvice2 implements MethodBeforeAdvice, AfterReturningAdvice, MethodInterceptor {
//前置增强
  @Override
  public void before(Method method, Object[] objects, Object o) throws Throwable {
      System.out.println("before>>>>>");
}
//后置增强
    @Override
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("after>>>>");
    }
//环绕通知
   @Override
   public Object invoke(MethodInvocation methodInvocation) throws Throwable {
       System.out.println("环绕前通知方法");
       Object res = methodInvocation.getMethod().invoke(methodInvocation.getThis(), methodInvocation.getArguments());
       System.out.println("环绕后通知方法");
       return res;
}
}

advisor与aspect的不同点:

语法形式不同:

  • advisor是通过实现接口来确认通知的类型

  • aspect是通过配置确认通知的类型,更加灵活

可配置的切面数量不同

  • 一个advisor只能配置一个固定通知和一个切点表达式

  • 一个aspect可以配置多个通知和多个切点表达式任意组合

使用场景不同:

  • 允许随意搭配情况下可以使用ascpect进行配置

  • 如果通知类型单一,切面单一的情况下可以使用advisor进行配置

  • 在通知类型已经固定,不用人为指定通知类型时,可以使用advisor进行配置

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring中,基于XML配置AOP的步骤如下: 1. 添加依赖并准备环境。 2. 创建通知类和接口,并实现方法。 3. 配置spring.xml文件。 4. 执行测试。 具体步骤如下: 1. 创建通知类和接口,并实现方法。 2. 在spring.xml文件中配置AOP。 3. 使用aop:config标签开始AOP配置。 4. 使用aop:aspect标签配置切面,其中id属性是给切面提供一个唯一标识,ref属性是指定通知类bean的Id。 5. 在aop:aspect标签内部使用对应标签来配置通知的类型,例如使用aop:before标签配置前置通知。 6. 在aop:before标签中,使用method属性指定Logger类中哪个方法是前置通知,使用pointcut属性指定切入点表达式,该表达式指定了对业务层中哪些方法进行增强。 7. 切入点表达式的写法可以使用关键字execution和具体的表达式来指定方法的访问修饰符、返回值、包名、类名和方法名等。 8. 在通知类中添加环绕通知方法,使用ProceedingJoinPoint接口作为环绕通知的方法参数,该接口提供了proceed()方法,用于明确调用切入点方法。 9. 在环绕通知方法中,可以通过proceedingJoinPoint.proceed(args)调用切入点方法,并在方法执行前后进行相应的操作。 10. 最后,执行测试来验证AOP配置的效果。 以上是基于XML配置AOP的步骤。通过配置AOP,可以在指定的切入点方法执行前后,或者在方法执行过程中进行增强操作。 #### 引用[.reference_title] - *1* *3* [Spring之基于XML配置AOP](https://blog.csdn.net/qq_38628046/article/details/108065715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Spring基于XMLAOP配置](https://blog.csdn.net/weixin_45430616/article/details/104101117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值