spring AOP切入点execution表达式

简介: spring AOP切入点execution表达式

切入点

  • 定义要拦截哪些类的哪些方法
  • 匹配规则,拦截什么方法
  • 定义切入点 @Pointcut(“execution(*匹配规则”)
  • Aop切入点表达式
表达式中的第一个* 代表方法的修饰范围 (public 、private、protected)
如果取值是*,则表示所有范围
执行所有的方法  execution(public *(..))
执行任意的set方法  execution(* set*(..))
执行指定包下的任意类的任意方法 execution(* com.xxx.service.*.*(..))
执行指定包及子包下的任意类的任意方法  execution(* com.xxx.service..*.*(..))

代码案例

切面类

@Component
@Aspect     //声明当前类是一个切面
public class LogCut {
    //切入点
    @Pointcut("execution(* com.aop.service..*.*(..))")
    public void cut(){}
    //声明前置通知
    @Before(value = "cut()")
    public void before(){
        System.out.println("前置通知...");
    }
    //声明返回通知        没有异常的情况下执行
    @AfterReturning(value = "cut()")
    public void afterReturn(){
        System.out.println("返回通知...");
    }
    //声明最终通知        无论是否有异常,都会执行
    @After(value = "cut()")
    public void after(){
        System.out.println("最终通知...");
    }
    //异常通知
    @AfterThrowing(value = "cut()")
    public void afterThrowing(){
        System.out.println("异常通知...");
    }
    //环绕通知
    @Around(value = "cut()")
    public Object around(ProceedingJoinPoint pjp){
        Object obj = null;
        try {
            obj =  pjp.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("环绕通知...");
        return obj;
    }
}

xml文件配置

<?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"
       xmlns:context="http://www.springframework.org/schema/context"
       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
       http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--开启注解扫描-->
    <context:component-scan base-package="com.aop"/>
    <!--开启aop注解代理-->
    <aop:aspectj-autoproxy/>
</beans>


相关文章
|
8天前
|
运维 Java 程序员
Spring5深入浅出篇:Spring切入点详解
该文档是关于Spring框架中切入点的详细解释。切入点是AOP(面向切面编程)的核心概念,用于定义通知(如日志、事务管理)应该附加到代码的哪些位置。文档主要介绍了切入点表达式的不同类型: 1. 方法切入点表达式:使用`execution()`定义匹配的方法,星号`*`代表任意返回值和方法名,`(..)`表示任意参数。 2. 类切入点:指定特定类以应用额外功能,可以精确到类中的所有方法,或者只包含特定包的类。 3. 包切入点表达式:适用于整个包或包及其子包内的所有类和方法。
|
1月前
|
Java 关系型数据库 MySQL
利用Spring AOP技术实现一个读写分离
利用Spring AOP技术实现一个读写分离
32 0
|
2月前
|
监控 Java 开发者
Spring AOP动态代理
Spring AOP动态代理
46 1
|
2月前
|
Java Spring 容器
Spring的AOP失效场景详解
Spring的AOP失效场景详解
120 0
|
3月前
|
XML Java 编译器
Spring AOP初步理解及使用
Spring AOP初步理解及使用
49 0
|
2月前
|
设计模式 Java Maven
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
36 1
|
2月前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
67 1
|
3月前
|
XML Java 数据格式
5个点轻松搞定Spring AOP底层实现原理
AOP 也是 Spring 中一个较为重要的内容,相对于传统的 OOP 模式,AOP 有很多让人难以理解的地方,本篇文章将向大家介绍 AOP 的实现方法及其底层实现,内容包括:
47 1
|
1天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
7 0
|
1天前
|
Java 测试技术 开发者
【亮剑】如何通过自定义注解来实现 Spring AOP,以便更加灵活地控制方法的拦截和增强?
【4月更文挑战第30天】通过自定义注解实现Spring AOP,可以更灵活地控制方法拦截和增强。首先定义自定义注解,如`@MyCustomAnnotation`,然后创建切面类`MyCustomAspect`,使用`@Pointcut`和`@Before/@After`定义切点及通知。配置AOP代理,添加`@EnableAspectJAutoProxy`到配置类。最后,在需拦截的方法上应用自定义注解。遵循保持注解职责单一、选择合适保留策略等最佳实践,提高代码可重用性和可维护性。记得测试AOP逻辑。