创建一个切面类
import com.alibaba.fastjson.JSONObject;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class StoreAspect {
/**
* 此处的切点是注解的方式,也可以用包名的方式达到相同的效果
* '@Pointcut("execution(* com.wwj.springboot.service.impl.*.*(..))")'
*/
@Pointcut("@annotation(com.hunt.mobile.annoation.StoreBrowseAnnotation)")
public void operationLog() {
}
//@After 目标方法调用之后通知
@After("operationLog()")
public void addUserBrowseRecord(JoinPoint joinPoint){
Object[] objects = joinPoint.getArgs();
String storeId = JSONObject.parseObject(JSONObject.toJSONString(objects[0])).get("storeId").toString();
//这里根据自己需要的逻辑编码
//比如获取storeId新增数据到用户访问记录的表
}
}
创建一个annotation类
匹配连接点被它参数指定的Annotation注解的方法。也就是说,所有被指定注解标注的方法都将匹配。
import java.lang.annotation.*;
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface StoreBrowseAnnotation {
String value();
}
在要切入的的接口上定义
@StoreBrowseAnnotation("selectMStore")