8. Java-AOP 面向切面编程
专题使用汇总:
- Java-IDEA
- Java-Maven,依赖管理,私服 https://www.cnblogs.com/chenshaojun2008/p/17493632.html
- Java-IOC&DI
- Java-Mybatis连接池,动态sql https://www.cnblogs.com/chenshaojun2008/p/17496913.html
- Java-文件上传(本地和OSS)
- Java-登录校验JWT,过滤器,拦截器使用总结 https://www.cnblogs.com/chenshaojun2008/p/17500546.html
- Java-事务管理 https://www.cnblogs.com/chenshaojun2008/p/17500949.html
- Java-AOP https://www.cnblogs.com/chenshaojun2008/p/17501255.html
- IDEA 有用的插件使用汇总 记录 https://www.cnblogs.com/chenshaojun2008/p/17500940.html
8. Java-AOP
1.AOP:面向切面编程,就是面向特定方法编程。在不改变原有方法的基础上新增功能(功能增强,功能改变)
2.SpringAOP
3.SpringAOP 开发步骤;
一.使用场景:
1.记录操作日志
2.权限控制
3.事务管理
4.记录方法执行时间
二.优势
1.代码无浸入
2.减少重复代码
3.提高开发效率
4.维护方便
三.操作:执行流程,动态代理技术,生成动态代理对象(实现功能增强)
3.1 添加依赖在pom.xml
<!--AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
3.2 编写AOP程序:针对特定方法业务需要进行编程
@Slf4j
@Component
//@Aspect //AOP类
public class TimeAspect {
//@Around("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))") //切入点表达式,对所有类,接口记录执行时间
@Around("com.itheima.aop.MyAspect1.pt()")
public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {
//1. 记录开始时间
long begin = System.currentTimeMillis();
//2. 调用原始方法运行
Object result = joinPoint.proceed();
//3. 记录结束时间, 计算方法执行耗时
long end = System.currentTimeMillis();
log.info(joinPoint.getSignature()+"方法执行耗时: {}ms", end-begin);
return result;
}
}
四.核心概念
1.连接点: JoinPoint 可以被AOP控制的方法
2.通知:Advice 指那些重复的逻辑,即共性的功能
3.切入点:PointCut 匹配连接点的条件
@Pointcut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
public void pt(){}
@Pointcut("execution(* com.itheima.service.DeptService.list()) || " +
"execution(* com.itheima.service.DeptService.delete(java.lang.Integer))")
private void pt(){}
- 切面:Aspect:描述通知和切入点的关系
5.目标对象:Target 通知所应用的对象