依赖和配置

aop起步依赖

spring-context依赖下自动aop的依赖,除此之外,还需要导入Aspect的依赖

在第一张介绍过,由于Aspect的AOP做得比较完善,所以的spring直接采用了,所以需要额外导入依赖

 
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.1.6</version>
</dependency>
 <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.22</version>
 </dependency>

注解开发AOP

总览

使用@Aspect告诉spring这个类是做aop的,也就是正确执行@Pointcut等注解

记得用@Component把这个类作为bean交给spring处理

使用@EnableAspectJAutoProxy在配置类中告诉spring使用注解开发aop(@即识别@Aspect)

//springConfig类
@Configuration
@EnableAspectJAutoProxy
public class SpringConfig {
}

//MyAdvice类
@Component //告诉spring来加载我
@Aspect //告诉spring这个类用来做aop的
public class MyAdvice {
		//描述执行哪个方法的切入点
    @Pointcut("execution(void com.springAop.dao.Impl.BookDaoImpl.delete())")
    private void pt() {}
    //绑定共性功能和切入点的关系
    @Before("pt()")
    //通知
    public void method() {
        System.out.println(System.currentTimeMillis());
    }
}

步骤

定义切入点:

切入点定义依托一个不具有实际意义的方法执行,即无参数,无返回值,方法无实际逻辑 【理解为描述位置】

execution执行

 @Pointcut("execution(void com.springAop.dao.Impl.BookDaoImpl.delete())")
 private void pt() {}

绑定切入点与通知关系,并指定通知添加带原始连接点的具体执行位置

public class MyAdvice {
		//描述执行哪个方法的切入点
    @Pointcut("execution(void com.springAop.dao.Impl.BookDaoImpl.delete())")
    private void pt() {}
    //绑定共性功能和切入点的关系
    **@Before**("pt()")
    public void method() {
        System.out.println(System.currentTimeMillis());
    }
}

定义通知类受spring容器管理,并定义切面类

//MyAdvice类
@Component //告诉spring来加载我
@Aspect //告诉spring这个类用来做aop的
public class MyAdvice {
    @Pointcut("execution(void com.springAop.dao.Impl.BookDaoImpl.delete())")
    private void pt() {}
  
    @Before("pt()")
    public void method() {
    }
}

核心配置中开启spring对AOP注解驱动支持@EnableAspectJAutoProxy

@Configuration
@EnableAspectJAutoProxy
public class SpringConfig {
}

📌 SUMMARY:

这是站长