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
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值