Spring AOP之AspectJ实现方式

案例源码下载:https://gitee.com/yangzhenyu322/Spring-aop.git

①:添加配置

    xmlns:aop="http://www.springframework.org/schema/aop"
    http://www.springframework.org/schema/aop
    https://www.springframework.org/schema/aop/spring-aop.xsd

将上面配置添加到beans配置中:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       https://www.springframework.org/schema/aop/spring-aop.xsd">

②:添加依赖

在pom.xml文件中添加相关依赖:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>5.3.4</version>
    </dependency>

③:开启aop自动代理

在applicationContext-aop.xml中开启aop自动代理:

<aop:aspectj-autoproxy/>

④:扫描包

在applicationContext-aop.xml中添加下面代码进行指定包的扫描,否则无法使用注解:

<context:component-scan base-package="org.csu.spring.demo.aop"/>

⑤:使用注解@Aspect表明某个类是切面

⑥:表明切面中的方式是前置建议还是后置建议使用

前置建议:@Before(value = “execution(* org.csu.spring.demo.aop.persistence..(…))”)
后置建议:@After(value = “execution(* org.csu.spring.demo.aop.persistence..(…))”)

切面类如下:

package org.csu.spring.demo.aop.aspectj;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class DemoAspect {

    //execution(访问修饰符,返回值类型,类,方法,参数)
    @Before(value = "execution(* org.csu.spring.demo.aop.persistence.*.*(..))")
    public void before(){
        System.out.println("前置的建议:安全验证...");
    }
}

⑦创建切面

在applicationContext-aop.xml中添加下面代码创建切面,才能将切片添加进要切入类的方法中:

<bean id="demoAspect" class="org.csu.spring.demo.aop.aspectj.DemoAspect"/>
//其中org.csu.spring.demo.aop.aspectj.DemoAspect是切面类的完整类名

运行效果如下:
Spring AOP之AspectJ实现方式

上一篇:Android AOP编程(一)——AspectJ的使用


下一篇:Android AspectJ 常用埋点,拦截,监听注解使用