一、導入切面庫
以maven工程為例,除了springmvc基礎的庫,需要導入切面庫,本例aspectj為例。
<properties> <aspectj.version>1.9.3</aspectj.version> </properties> ...... <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency>
二、編寫基礎植入的類,以打印功能為例。
不得不歌頌一下注解和Spring,引入和配置大大的簡化了。
@Aspect @Slf4j @Component public class LogAspectUtil { @Pointcut("execution(public * com.sanro.controller..*.*(..))")//配置需要植入打印的包路徑 public void controllerLog() { } @Before("controllerLog()") public void logBefore(JoinPoint joinPoint) { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); log.info("full url = " + request.getRequestURL().toString()); log.info("http method = " + request.getMethod()); log.info("class method = " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); } @After("controllerLog()") public void logAfter(JoinPoint joinPoint) { log.info("controller execute finished... "); } }
三、坐享其成
現在com.sanro.controller目錄下的所有controller類都能
1. 在請求進入的時候自動打印請求的url,method等想要的信息和處理動作;
2. 在請求處理結束的時候都能打印時間或者增加想要的處理動作。