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


    一、简介+工作流程。

    简介

    SpringAop实际上就是代理模式

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

    工作流程

    二、导入依赖

    1.spring-aop

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

    1. org.springframework
    2. spring-context
    3. 5.2.10.RELEASE

    2.aspectjweaver包

    1. org.aspectj
    2. aspectjweaver
    3. 1.9.4

    三、定义接口和实现类

    1. public interface BookDao {
    2. public void save();
    3. public void update();
    4. }

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

    1. @Repository
    2. public class BookDaoImpl implements BookDao {
    3. public void save() {
    4. System.out.println(System.currentTimeMillis());
    5. System.out.println("book dao save ...");
    6. }
    7. public void update(){
    8. System.out.println("book dao update ...");
    9. }
    10. }

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

    1. @Component //告诉spring要把MyAdvice 当作Bean
    2. //设置当前类为切面类类
    3. @Aspect //告诉spring要把MyAdvice 当作AOP,切面类
    4. //定义通知类
    5. public class MyAdvice {
    6. //设置切入点,要求配置在方法上方
    7. @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    8. private void pt(){}
    9. //设置在切入点pt()的前面运行当前操作(前置通知)
    10. @Before("pt()")
    11. //制作共性通知
    12. public void method(){
    13. System.out.println(System.currentTimeMillis());
    14. }
    15. }

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

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

    1. @Configuration
    2. @ComponentScan("com.itheima")
    3. //开启注解开发AOP功能
    4. @EnableAspectJAutoProxy
    5. public class SpringConfig {
    6. }

    六、自定义service层调用测试

    1. public class App {
    2. public static void main(String[] args) {
    3. ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
    4. BookDao bookDao = ctx.getBean(BookDao.class);
    5. // bookDao.update();
    6. bookDao.update();
    7. // System.out.println(bookDao.getClass());
    8. }j
    9. }

    七、切入点详解

    切入点表达式语法规格:

    切入点表达式书写技巧:

    八、AOP通知类型

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

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

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

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

     

     4.@AfterReturning

    5.@AfterThrowing

  • 相关阅读:
    2023江苏科技大学计算机考研信息汇总
    19.2 容器分类、array、vector容器精解
    【LeetCode】Day95-有效的数独&矩阵置零
    计算机复习
    2024年申报国自然项目基金撰写及技巧
    【数据库】mysql索引
    蓝桥杯 图形排版
    合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)
    iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?
    【MySQL —— 事务】四大特性、隔离级别
  • 原文地址:https://blog.csdn.net/m0_61395860/article/details/133132568