• spring Boot 之AOP小试


    SpringBoot实现AOP引入的依赖

    1 <dependency>
    2     <groupId>org.springframework.boot</groupId>
    3     <artifactId>spring-boot-starter-aop</artifactId>
    4 </dependency>

    启动类不需要添加

    @ComponentScan("com.only.mate.springboot.aop")
    @EnableAspectJAutoProxy//开启AspectJ注解

    一、execution实现AOP

        1、创建Aspect

     1 package lut.aop;
     2 
     3 import org.aspectj.lang.annotation.After;
     4 import org.aspectj.lang.annotation.Before;
     5 import org.aspectj.lang.annotation.Pointcut;
     6 import org.springframework.stereotype.Component;
     7 
     8 @org.aspectj.lang.annotation.Aspect
     9 @Component
    10 public class Aspect {
    11 
    12     @Pointcut("execution(* lut.aop.*.*(..))")
    13     public void pointcut(){}
    14     @Before("pointcut()")
    15     public void print1(){
    16         System.out.println("befor process execute");
    17         }
    18 
    19     @After("pointcut()")
    20     public void print2(){
    21         System.out.println("after process execute");
    22     }
    23 }

    2、使用request调用

     @RequestMapping("he")
        public String getMapp(){
            System.out.println("mapping method execute");
            return "kello";
        }

    结果:

    befor process execute
    mapping method execute
    after process execute

    二、使用特定注解来实现

    1、创建特定注解

     1 package lut.aop;
     2 
     3 import java.lang.annotation.ElementType;
     4 import java.lang.annotation.Retention;
     5 import java.lang.annotation.RetentionPolicy;
     6 import java.lang.annotation.Target;
     7 
     8 @Target(ElementType.METHOD)
     9 @Retention(RetentionPolicy.RUNTIME)
    10 public @interface Print {
    11     String value() default "";
    12 }

    2、创建ASpect

     1 package lut.aop;
     2 
     3 import org.aspectj.lang.annotation.*;
     4 import org.aspectj.lang.annotation.Aspect;
     5 import org.springframework.stereotype.Component;
     6 
     7 @Aspect
     8 @Component
     9 public class AnnotationAspect {
    10 
    11       @Pointcut("@annotation(print)")
    12         public void annotationpointcut(Print print){}
    13 
    14        @Before("annotationpointcut(print)")
    15         public void print1(Print print){
    16         System.out.println("befor process execute1");
    17     }
    18 
    19         @After("annotationpointcut(print)")
    20         public void print2(Print print){
    21         System.out.println("after process execute1");
    22     }
    23 
    24 }

    3、request调用

    1   @Print
    2     @RequestMapping("he1")
    3     public String getMapp1(){
    4         System.out.println("mapping method execute1");
    5         return "kello";
    6     }

    结果:

    befor process execute1
    mapping method execute1
    after process execute1

    三、若两种都实现,打印结果是什么?

    befor process execute1     --注解方式
    befor process execute      --execution方式
    mapping method execute1  
    after process execute     --execution方式
    after process execute1   --注解方式

    注:就像栈一样 

           

    execution表达式意义:@Pointcut("execution(* lut.aop.*.*(..))")

    方法参数可以设置为:(String,int)或者(String,*)或者(String,..).

         

  • 相关阅读:
    网络编程TCP
    collections模块
    异常处理
    hashlib模块
    configparse模块
    logging模块
    序列化模块
    os模块
    时间模块
    random模块
  • 原文地址:https://www.cnblogs.com/swfzzz/p/12023687.html
Copyright © 2020-2023  润新知