依赖和配置
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: