AOP

*概念:面向切面编程

  OOP:面向对象编程

*作用:在不惊动原始设计的基础上为其进行功能增强

*spring理念:无侵入式编程

*核心概念:

AOP的入门案例:

  1.导入坐标

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.25</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.4</version>
    </dependency>

</dependencies>

  2.制作连接点方法

  3.制作共性功能

  4.定义切入点

package org.example.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class aop_01 {
    @Pointcut("execution(void org.example.book.book.update())")//切入点方法
    private void pt(){}

    @Before("pt()")
    public void method(){//连接点方法
        System.out.println(System.currentTimeMillis());//共性功能
    }
}

  5.绑定切入点与通知关系

package org.example.spring;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;

@Configuration
@ComponentScan("org.example")
@EnableAspectJAutoProxy//识别@Aspect  绑定关系
public class SpringConfig {
}

AOP核心概念:

*目标对象:原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成工作的。

*代理:目标对象无法完成的工作,需要对其进行功能回填,通过原始对象的代理对象实现。

AOP切入点表达式:

切入点:要进行增强的方法

切入点表达式:要进行增强的方法的描述方式

  标准格式:动作关键字(访问修饰符  返回值   包名.类/接口名.方法名(参数))

      访问修饰符:可以省略

通配符:

AOP的通知类型:

@Before:前面

@After:后面

@Around:环绕

@AfterReturning:正常运行完

@AfterThrowing:抛出异常后执行

AOP通知获取数据:

posted @ 2023-02-21 19:27  会秃头的小白  阅读(7)  评论(0编辑  收藏  举报