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());
    }
}
相关推荐
阮小贰4 分钟前
干支编码的确定性实现:节气切分 + 1000 条溯源断语(附 JS 源码)
开发语言·javascript·ecmascript
niuniudengdeng6 分钟前
从小程序到 WebView:一个理发店管理系统的全栈架构设计与落地实践
java·python
LccKyI13 分钟前
C#基础编程 面试题汇总(二)
java·面试·c#
一晌小贪欢17 分钟前
Python办公17:暴力拆分——按页数或指定范围提取 PDF 核心页面
java·开发语言·python·pdf·excel·数据可视化·python办公
2401_8346369918 分钟前
Docker 容器化技术全解:从镜像构建到容器编排的完整教案1
java·docker·容器
孫治AllenSun18 分钟前
【LangChain4J-06】Prompt 工程与模板化开发
开发语言·python·prompt
jjjava2.024 分钟前
初步认识接口测试
java·可用性测试
吠品25 分钟前
TortoiseSVN 状态图标不显示的排查与解决办法
java·服务器·数据库
wuyk55527 分钟前
9.冒泡排序:像鱼缸泡泡一样的简单排序算法
开发语言·stm32·单片机·算法·排序算法