基于XML的AOP配置

创建spring的配置文件并导入约束

此处要导入aop的约束

<?xml version="1.0" encoding="UTF-8"?> 
  <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd"> 
  </beans>

在pom.xml中添加依赖

以下添加的依赖用于解析切入点表达式

<dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.7</version>
</dependency>

spring中基于XML的AOP配置步骤

1. 配置srping的Ioc

2. 把通知bean也交给Spring来管理

<!-- 配置Logger类 -->
<bean id="logger" class="com.itheima.utils.Logger"></bean>

3. 使用aop:config标签表明开始AOP的配置

4. 使用aop:aspect标签表明配置切面

  id属性: 给切面提供一个唯一标识

  ref属性: 指定通知类bean的id

5. 在aop:aspect标签的内部使用对应标签来配置通知的类型

    并且建立通知方法和切入点方法的关联

  method属性: 用于指定通知类中,哪个方法是对应的通知

  pointcut属性: 用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强

切入点表达式的写法:

  关键字: execution(表达式)

  标准的表达式:

    访问修饰符   返回值    包名.包名.包名...类名.方法名(参数列表)

    public void com.itheima.service.impl.AccountServiceImpl.saveAccount()

  访问修饰符可以省略

  返回值可以使用通配符,表示任意返回值

    * com.itheima.service.impl.AccountServiceImpl.saveAccount()

  包名可以使用通配符表示任意包   但是有几级包, 就需要写几个*.

.    * *.*.*.*.AccountServiceImpl.saveAccount()

  包名可以使用  ..  表示当前包及其子包  

    * *..AccountServiceImpl.saveAccount()

  类名和方法名都可以使用* 进行通配

    * *..*.*()     此时方法中有参数的不会进行增强

  参数列表

    可以直接写数据类型:

      基本类型直接写名称     int

      引用类型写包名.类名的方式    java.lang.String

    可以使用通配符表示任意类型, 但是必须有参数(有参数的才会进行增强)

      * *..*.*(*)

    可以使用..表示有无参数均可,有参数可以是任意类型

  全通配写法

    * *..*.*(..)

  实际开发中切入点表达式的通常写法: 

    切到业务层实现类下的所有方法

      * com.itheima.service.impl.*.*(..)

实例: 

<!--配置AOP-->
    <aop:config>
        <!--配置切面 -->
        <aop:aspect id="logAdvice" ref="logger">
            <!-- 配置通知的类型,并且建立通知方法和切入点方法的关联-->
            <aop:before method="printLog" pointcut="execution(* com.itheima.service.impl.*.*(..))"></aop:before>
        </aop:aspect>
    </aop:config>

 

原文地址:https://www.cnblogs.com/mkl7/p/10692882.html