8. Java-AOP 面向切面编程

发布时间 2023-06-24 16:19:51作者: 大树2

专题使用汇总:

  1. Java-IOC&DI
  2. Java-Maven,依赖管理,私服
  3. Java-IOC&DI
  4. Java-Mybatis连接池,动态sql
  5. Java-文件上传(本地和OSS)
  6. Java-登录校验JWT
  7. Java-事务管理
  8. Java-AOP

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(){}
  1. 切面:Aspect:描述通知和切入点的关系
    5.目标对象:Target 通知所应用的对象