Spring核心之一面向切面编程AOP和自定义注解

1、AOP简介

        AOP即面向切面,主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

        通俗点讲就是提供一个为一个业务实现提供切面注入的机制,通过这种方式,在业务运行中将定义好的切面通过切入点绑定到业务中,以实现将一些特殊的逻辑绑定到此业务中。

  比如,若是需要一个记录日志的功能,比如事务功能。

2、spring支持的通知类型

  • 前置通知@before:在一个方法执行前被调用。可以获取目标对象 和 目标方法相关的信息
  • 最终通知@after: 在方法执行之后调用的通知,无论方法执行是否成功。
  • 后置通知@after-returning: 仅当方法成功完成后执行的通知。可以通过配置获取返回值
  • 异常通知@after-throwing: 在方法抛出异常退出时执行的通知。
  • 环绕通知@around: 在方法执行之前和之后调用的通知。

 3、AOP的使用

a、导入依赖

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

b、自定义注解

注:注解中定义的方法没有参数,且返回类型仅限于原始类型,字符串,枚举,注解或以上类型的集合

@Documented 
@Retention(RetentionPolicy.RUNTIME)  //作用周期:运行时有效
@Target(ElementType.METHOD)   //作用范围:方法和类
public @interface MyAnnotation {
       String[] value();
}

c、编写切面

 
@Aspect  //声明切面注解
@Component
public class TestAspect {
	
    /**
     * 定义切点-->自定义注解方式(在需要使用切面的地方加上注解)
     */
    @Pointcut("@annotation(com...aspect.MyAnnotation )")
    public  void afterAsperct(){
 
    }
 
    /**
     * 具体在切点前面前或者后需要执行的流程,
     * 在此只写了在切点前执行
     * -->切点后执行的话 @After 相关的注解,
     */
    @Before("afterAsperct()")
    public void before(){
        System.out.println("切面前执行-->");
    }
 
}

d、在需要使用切面的接口或者方法上加上自定义的注解


@RestController
@RequestMapping("test")
public class TestController {
 
    @MyAnnotation("可以自定义参数")   //自定义的注解(加上后会执行切面)
    @GetMapping("/test")
    public  String  test(){
        System.out.println("执行切面之后执行啦");
        return "SUCCESS";
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_52540274/article/details/119757349