1.在pom.xml中引入相对的jar包
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
</dependency>
</dependencies>
2.在自己的包结构下,重新建立一个aop包的,此包用来作为本次项目的面向切面编程
3.在项目里面建立一个java类,将此类标记为切面类,需要开启两个注解 @Component,此注解的意思是将当前类的对象创建使用维护交由Spring容器管理维护,@Aspect 将当前类标记为切面类,@Order() 优先级 值越低优先级越高
4.AOP 一共有五种通知,都相对应的注解进行标识,在方法上进行表示
(1) @Before注解表示作为前置通知
(2)@After 最终通知
(3)@AfterReturning 后置通知(返回通知)
(4)@AfterThrowing 异常通知
(5)@Around 环绕通知
不管进行什么的切面通知,都要配置切入点,标记这个通知或者说被增强类,在那个包下或者在某个方法下
在此演示环绕通知,检测service包下所有的方法,记录他们的耗时时间,在控制台上进行打印
@Component // 将当前类的对象创建使用维护交由Spring容器管理维护
@Aspect // 将当前类标记为切面类
public class TimerAspect {
@Around("execution(* com.zy.store.service.impl.*.*(..))")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
// 先记录当前时间
long start = System.currentTimeMillis();
Object result = pjp.proceed(); // 调用目标方法:login
// 插入数据库
// 后记录当前时间
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start));
//将当前的环绕通知映射到某个切面上(指定连接的点)
return result;
}
}