package com.zhangsong1.s01;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import java.util.Arrays;
//切面类
@Aspect//交给AspectJ的框架去识别切面类
@Component//创建对象
public class MyAspect {
// 所有切面的功能都是由切面的方法来实现
// 可以将各种切面都在此类进行开发
// 前置通知的切面方法的规范
// 访问权限是public
// 返回值是void
// 方法名称自定义
// 方法没有参数如果有只能是JoinPoint类型
// 必须使用@Before注解来声明切入的时机和切入点
// 参数 value 指定切入点表达式
// 业务犯法 public String dosome(String name, int age)
// @Before(value = "execution(public String com.zhangsong1.s01.SomeServiceImpl.dosome(String,int))")
// public void myBefore()
// {
// System.out.println("切面中的前置通知功能实现");
// }
// 这个代表任意返回值这个包下的任意方法任意参数都可以切入
//@Before(value = "execution(public * com.zhangsong1.s01.SomeServiceImpl.*(..))")
//public void myBefore()
//{
// System.out.println("切面中的前置通知功能实现");
//}
// s01包下的任意类任意方法都可以切入
@Before(value = "execution(* com.zhangsong1.s01.*.*(..))")
public void myBefore(JoinPoint jp)
{
System.out.println("切面中的前置通知功能实现");
System.out.println("目标方法的签名"+jp.getSignature()+",目标方法的参数"+ Arrays.toString(jp.getArgs()));
}
// s01包及其任意子路径下的包和类中的任意方法和任意参数
//@Before(value = "execution(* com.zhangsong1.s01..*(..))")
//public void myBefore()
//{
// System.out.println("切面中的前置通知功能实现");
//}
//任意的返回值类型任意包下的任意类中的任意方法
//@Before(value = "execution(* *(..))")
//public void myBefore()
//{
// System.out.println("切面中的前置通知功能实现");
//}
}