• Day 92


    _Spring技术–AOP工作流程

    1. Spring容器启动
    2. 读取所有切面配置中的切入点
    3. 初始化bean,棚顶bean对应的类中的方法是否匹配到任意切入点
      • 匹配失败,创建对象
      • 匹配成功,创建原始对象(目标对象)的代理对象
    4. 获取bean执行方法
      • 获取bean,调用方法执行,完成操作
      • 获取bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作
    5. AOP核心概念
      • 目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
      • 代理(Proxy):目标对象无法直接完成工作,需要对其进行功能回添

    _Spring技术–AOP切入点表达式

    1. 切入点:要进行增强的方法
    2. 切入点表达式:要进行增强方法的描述方式
    3. 书写技巧在这里插入图片描述

    _Spring技术–AOP通知类型

    1. AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码实要将其加入到合理的位置
    2. AOP通知共分为5种类型
      • 前置通知(@Before)
      • 后置通知(@After)
      • 环绕通知(Around)<—重点
      • 返回后通知(了解)
      • 抛出异常后通知(了解)

    _Spring技术–AOP业务层接口万次执行效率

    1. 需求任意业务层接口执行均可显示其执行效率(执行时常)

    2. 分析:

      • 业务功能:业务层接口执行前后分别记录时间,求插值得到执行效率

      • 通知类型选择前后均可以增强的类型—>环绕通知

      • 详情见下图:在这里插入图片描述

      • 最后在test文件中测试程序的时候不要忘记了获取bean的时候面向接口编程

        • package com.Alvis.service;
          
          import com.Alvis.config.SpringConfig;
          import com.Alvis.domain.Student;
          import com.Alvis.service.impl.StudentServiceImpl;
          import org.junit.Test;
          import org.junit.runner.RunWith;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.annotation.AnnotationConfigApplicationContext;
          import org.springframework.test.context.ContextConfiguration;
          import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
          
          import java.util.List;
          
          @RunWith(SpringJUnit4ClassRunner.class)  // 设置类运行器
          @ContextConfiguration(classes = SpringConfig.class)
          
          public class StudentTest {
          
              @Test
              public void selectAll() {
                  ApplicationContext apx = new AnnotationConfigApplicationContext(SpringConfig.class);
                  StudentService studentService = apx.getBean(StudentService.class);
                  List<Student> selectAll = studentService.selectAll();
                  System.out.println(selectAll);
              }
          
              @Test
              public void selectById() {
                  ApplicationContext apx = new AnnotationConfigApplicationContext(SpringConfig.class);
                  StudentService studentService = apx.getBean(StudentService.class);
                  Student selectById = studentService.selectById(2);
                  System.out.println(selectById);
              }
          
          }
          ========================================================
          万次执行:com.Alvis.service.StudentService.selectAll--->2085ms
          null
          826, 2022 11:06:03 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
          信息: {dataSource-2} inited
          万次执行:com.Alvis.service.StudentService.selectById--->1562ms
          null
          
          进程已结束,退出代码0
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39
          • 40
          • 41
          • 42
          • 43
          • 44
          • 45
  • 相关阅读:
    .Net RabbitMQ(消息队列)
    CMS建站流程
    [附源码]java毕业设计儿童资源教育网站
    【学懂数据结构】数据结构绪论
    【Spring Cloud】Nacos注册中心
    01 C语言程序设计
    G1D6-Intriguing properties of neural networks&&&AttacKG&美亚2021
    HTTP知识点总结
    【元宇宙】5个视角,重新看待区块链和元宇宙
    python中的cachetools用法详解(Cached、LRUCache、TTLCache、LFUCache、RRCache)
  • 原文地址:https://blog.csdn.net/ALVIS_108/article/details/126539657