_Spring技术–AOP工作流程
- Spring容器启动
- 读取所有切面配置中的切入点
- 初始化bean,棚顶bean对应的类中的方法是否匹配到任意切入点
- 匹配失败,创建对象
- 匹配成功,创建原始对象(目标对象)的代理对象
- 获取bean执行方法
- 获取bean,调用方法执行,完成操作
- 获取bean是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作
- AOP核心概念:
- 目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
- 代理(Proxy):目标对象无法直接完成工作,需要对其进行功能回添
_Spring技术–AOP切入点表达式
- 切入点:要进行增强的方法
- 切入点表达式:要进行增强方法的描述方式
- 书写技巧:
_Spring技术–AOP通知类型
- AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码实要将其加入到合理的位置
- AOP通知共分为5种类型
- 前置通知(@Before)
- 后置通知(@After)
- 环绕通知(Around)<—重点
- 返回后通知(了解)
- 抛出异常后通知(了解)
_Spring技术–AOP业务层接口万次执行效率
-
需求:任意业务层接口执行均可显示其执行效率(执行时常)
-
分析:
-
业务功能:业务层接口执行前后分别记录时间,求插值得到执行效率
-
通知类型选择前后均可以增强的类型—>环绕通知
-
详情见下图:
-
最后在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 8月 26, 2022 11:06:03 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info 信息: {dataSource-2} inited 万次执行:com.Alvis.service.StudentService.selectById--->1562ms null 进程已结束,退出代码0
-
-