0
点赞
收藏
分享

微信扫一扫

LeetCode 2813. Maximum Elegance of a K-Length Subsequence【反悔贪心】2582

ivy吖 2023-08-14 阅读 44

Spring Aop

(Aspect orirnted Programming)面向切面编程,是对面向对象编程的一种补充,是一种编程思想,是对某一类的事情的集中处理。

比如用户登录状态的验证状态,在之前写servlet版本的博客系统,这里就有一个登录验证而且是在每一个页面都添加了一个登录验证,在使用Aop后,只需要写一个类就可以解决这个问题。

Aop组成

  1. 切面(Aspect

  2. 切点(Pointcut

  3. 通知(Advice

  4. 链接点(Jion Poit

实现AOP步骤:

  1. 添加依赖

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    
  2. 定义切面

    @Aspect //定义切面
    @Component
    public class UserAspect {
        
    }
    
  3. 定义切点

    @Aspect //定义切面
    @Component
    public class UserAspect {
        @Pointcut("execution(* com.example.demo.controller.UserController.*(..)))")
        //空方法,主要是一个标识作用
        public void pointcut(){}
    }
    

    定义目录语法格式是AspectJ支持三种通配符

  4. 通知

    具体实现方法

    @RestController
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("/grtUser")
        public String getUser(){
            System.out.println("do getUser");
            return "get User";
        }
        @RequestMapping("/delUser")
        public String delUser(){
            System.out.println("do delUser");
            return "delUser";
        }
    }
    

    实现通知

    @Aspect //定义切面
    @Component
    public class UserAspect {
        @Pointcut("execution(* com.example.demo.controller.UserController.*(..)))")//切点,括号中填写目录名称,在执行时会自动扫描方法,这⾥使⽤ AspectJ 表达式语法
        public void pointcut(){
    		//目标方法,这⾥是空方法,主要是一个标识作用
        }
        //前置通知
        @Before("pointcut()")
        public void doBefore(){
            System.out.println("执行了前置通知");
        }
        //后置通知
        @After("pointcut()")
        public void doAfter(){
            System.out.println("执行了后置通知");
        }
        //环绕通知
        @Around("pointcut()")
        public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
            System.out.println("环绕通知之前");
            //执行目标方法
            Object object = joinPoint.proceed();
            System.out.println("环绕通知之后");
            return object;
        }
        @AfterReturning("pointcut()")
        public void doAfterReturning(){
            System.out.println("执行了返回方法");
        }
        @AfterThrowing("pointcut()")
        public void doAfterThrowing(){
            System.out.println("执行了抛出异常方法");
        }
    }
    

    四种通知方法:

AOP动态代理(实现原理)

Spring 动态代理组成:

课件

举报

相关推荐

0 条评论