Spring-AOP+入门案例(注解)+AOP切入点语法+AOP通知类型

一、简介+工作流程。

简介

SpringAop实际上就是代理模式

切面=切入点+连接点+通知

工作流程

二、导入依赖

1.spring-aop包

该包是在spring-context依赖下的子包,所以有context就有aop

java 复制代码
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

2.aspectjweaver包

java 复制代码
<dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>

三、定义接口和实现类

java 复制代码
public interface BookDao {
    public void save();
    public void update();
}

tip:@Repository 注解加在Dao层上,也就是与数据库操作的层上。

java 复制代码
@Repository
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println(System.currentTimeMillis());
        System.out.println("book dao save ...");
    }

    public void update(){
        System.out.println("book dao update ...");
    }
}

四、定义通知类+制作通知+定义切入点

java 复制代码
@Component  //告诉spring要把MyAdvice 当作Bean
//设置当前类为切面类类
@Aspect //告诉spring要把MyAdvice 当作AOP,切面类
//定义通知类
public class MyAdvice {
    //设置切入点,要求配置在方法上方
    @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    private void pt(){}

    //设置在切入点pt()的前面运行当前操作(前置通知)
    @Before("pt()")
    //制作共性通知
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

由图可知,@Aspect 是告诉spring这是一个aop,@Pointcut 代表 pt()方法是一个切入点,注意py()方法只需要一个空架子 然后@Before("pt()") 代表在pt()方法之前将共性方法切入进去。

五、在spring核心配置中开启注解式aop的功能

java 复制代码
@Configuration
@ComponentScan("com.itheima")
//开启注解开发AOP功能
@EnableAspectJAutoProxy
public class SpringConfig {
}

六、自定义service层调用测试

java 复制代码
public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = ctx.getBean(BookDao.class);
//        bookDao.update();
        bookDao.update();
//        System.out.println(bookDao.getClass());
    }j
}

七、切入点详解

切入点表达式语法规格:

切入点表达式书写技巧:

八、AOP通知类型

1.@After----在切入点之后

2.@Before----在切入点之前

3.@Around----在切入点周围

ProceedingJoinPoint是用来获取原方法的对象,并且返回的是原方法的返回值

4.@AfterReturning

5.@AfterThrowing

相关推荐
汝生淮南吾在北19 分钟前
SpringBoot+Vue饭店点餐管理系统
java·vue.js·spring boot·毕业设计·毕设
无限大63 小时前
计算机十万个为什么--数据库索引
后端
冬夜戏雪3 小时前
【java学习日记】【2025.12.7】【7/60】
java·开发语言·学习
CC.GG4 小时前
【C++】二叉搜索树
java·c++·redis
学历真的很重要4 小时前
VsCode+Roo Code+Gemini 2.5 Pro+Gemini Balance AI辅助编程环境搭建(理论上通过多个Api Key负载均衡达到无限免费Gemini 2.5 Pro)
前端·人工智能·vscode·后端·语言模型·负载均衡·ai编程
地瓜伯伯4 小时前
Nginx终极配置指南:负载均衡、限流、反向代理、IP白名单、SSL、云原生、DNS解析、缓存加速全都有
spring boot·nginx·spring·spring cloud·微服务·云原生·负载均衡
JIngJaneIL5 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
+VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
南部余额5 小时前
踩坑与解惑:深入理解 SpringBoot 自动配置原理与配置排除机制
java·spring boot·自动配置原理·import
狂炫冰美式6 小时前
不谈技术,搞点文化 🧀 —— 从复活一句明代残诗破局产品迭代
前端·人工智能·后端