xml方式实现AOP

一、切点表达式

  1. execution(void com.itheima.aop.Target.method())不常用

匹配com.itheima.aop.Target类中无参、返回类型为 void的 method()方法。

  1. execution(void com.itheima.aop.Target.*(..))

匹配 com.itheima.aop.Target类中任意参数、返回类型为 void的所有方法。

3. execution(* com.itheima.aop.*.*(..))最常用

匹配com.itheima.aop 包下任意类、任意返回方法、任意参数。

  1. execution(* com.itheima.aop..*.*(..))

匹配 com.itheima.aop 包及其任意子包下,任意类、任意返回值、任意参数的所有公有方法。

  1. execution(* *..*.*(..))

匹配任意包、任意类、任意返回值、任意参数的所有公有方法(即"全扫")。

二、通知类型

三、切点表达式的抽取

四、基于注解的AOP开发

上个是从xml里配置,这个是在代码里通过注释配置

五、注解汇总

@Component("myAspect") :Spring 通用型组件注解,把当前类注册成 Bean, id=myAspect 。

配合 <context:component-scan/> 或 @SpringBootApplication 扫描即可;

后面在 XML 或别的类里可直接 @Autowired MyAspect xxx 。

注意

如果只写 @Component 不给名字,默认 Bean id 是类名首字母小写 myAspect 。

  1. @Aspect :告诉 Spring 这是一个切面类,才会去解析里面的 @Before/@Around 等通知。

怎么用

必须与 @Component 同时出现(或 XML 里配 <bean> ),否则 Spring 根本扫描不到。

注意

纯 Java 配置时记得加 @EnableAspectJAutoProxy或<aop:aspectj-autoproxy/> ,否则 @Aspect 失效 。

java 复制代码
@Component("myAspect")   // 1. 先让 Spring 扫描到并变成 Bean
@Aspect                   // 2. 再告诉 Spring"这是个切面"
public class LogAspect {

    // 定义切点
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void pt() {}

    // 前置通知
    @Before("pt()")
    public void before(JoinPoint jp) {
        System.out.println("【切面】方法开始 -> " + jp.getSignature().getName());
    }
}
相关推荐
mjhcsp几秒前
C++ Manacher 算法:原理、实现与应用全解析
java·c++·算法·manacher 算法
Coder_Boy_几秒前
基于SpringAI的在线考试系统-企业级软件研发工程应用规范案例
java·运维·spring boot·软件工程·devops
indexsunny2 分钟前
互联网大厂Java面试实战:微服务、Spring Boot与Kafka在电商场景中的应用
java·spring boot·微服务·面试·kafka·电商
SUDO-111 分钟前
Spring Boot + Vue 2 的企业级 SaaS 多租户招聘管理系统
java·spring boot·求职招聘·sass
sheji341616 分钟前
【开题答辩全过程】以 基于spring boot的停车管理系统为例,包含答辩的问题和答案
java·spring boot·后端
重生之后端学习21 分钟前
21. 合并两个有序链表
java·算法·leetcode·链表·职场和发展
源代码•宸21 分钟前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
遇见~未来25 分钟前
JavaScript数组全解析:从本质到高级技巧
开发语言·前端·javascript
南屿欣风25 分钟前
Sentinel 熔断规则 - 异常比例(order & product 示例)笔记
java·开发语言
u01040583632 分钟前
使用Java实现高性能的异步编程:CompletableFuture与Reactive Streams
java·开发语言