关于切面开发要注意的点:
@Aspect,@Order ,@Component
1.主要用的环绕 注解@Around,@Before,@After。
2.当用Around的时候,要注意ProceedingJoinPoint 的proceed和return obj
3.关于 execution的ASPECT表达式 参考spring AspectJ的Execution表达式
4.tips:execution表达式不会写的时候也可以参考import那边
package com.cargo.controller.staticdata.cityinfo;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import com.cargo.core.sales.staticdata.city.service.ICityInfoService;
/**
*
* @功能说明:切片学习
* @创建人员:HjwJames
* @变更记录:<BR>
* 1、2019年6月6日 HjwJames 新建类
*/
@Aspect
@Order(1)
@Component
public class testAspect {
private Logger log = LoggerFactory.getLogger(getClass());
ThreadLocal<Long> startTime = new ThreadLocal<>();
private ICityInfoService cityInfoService;
@Around("execution(* com.cargo.core.sales.staticdata.city.service.ICityInfoService.*(..))")
public Object monitorAround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("method start time:" + System.currentTimeMillis());
Object re = pjp.proceed();
System.out.println("method end time:" + System.currentTimeMillis());
return re;
}
@Before(value = "execution(* com.cargo.core.sales.staticdata.city.service.ICityInfoService.*(..))")
public void before(JoinPoint joinPoint) {
System.out.println("[Aspect2] before advise");
}
@After(value = "execution(* com.cargo.core.sales.staticdata.city.service.ICityInfoService.*(..))")
public void after(JoinPoint joinPoint) {
System.out.println("[Aspect1] after advise");
}
}