Pom文件中引用的,重点是AOP
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
<!--AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
1.创建一个Aop类
package com.zhangxiaosan.top.system;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LogAopAspect {
/***
* 设置异常切入点,检测指定位置的包
*/
@Pointcut("execution(* com.zhangxiaosan.top.*.controller..*.*(..))")
public void logScanPackages(){}
/***
* 执行方法之前切入
* @param joinPoint
*/
@Before("logScanPackages()")
public void logBeforeController(JoinPoint joinPoint){
System.out.println("\nAop-Before->Begin:");
System.out.println("Aop--->包名和方法:"+joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
System.out.println("Aop---> :"+joinPoint.getTarget());
System.out.println("Aop---> :"+joinPoint.getThis());
System.out.println("Aop--Before->End!\n");
}
/***
* 执行方法之后切入
* @param joinPoint
*/
@After("logScanPackages()")
public void logAfterController(JoinPoint joinPoint){
System.out.println("\nAop-After->Begin:");
System.out.println("Aop--->包名和方法:"+joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
System.out.println("Aop---> :"+joinPoint.getTarget());
System.out.println("Aop---> :"+joinPoint.getThis());
System.out.println("Aop--After->End!\n");
}
}
2.创建一个控制器,
package com.www.zhangxiaosan.top.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RequestMapping("/Test")
@RestController
public class TestController {
@RequestMapping(method = RequestMethod.GET,value = "/Test1")
public String Test1(Integer id){
System.out.println("-----toDo-------")
}
}
3.访问当前的控制器即可,在控制台下能看到如下打印:
2020-08-25 15:45:43.972 INFO 10100 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
2020-08-25 15:45:43.987 INFO 10100 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
2020-08-25 15:45:44.017 INFO 10100 --- [ main] s.d.s.w.s.ApiListingReferenceScanner : Scanning for api listing references
2020-08-25 15:45:44.136 INFO 10100 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8001 (http) with context path ''
2020-08-25 15:45:44.138 INFO 10100 --- [ main]
Aop-Before->Begin:
Aop---包名和方法:com.zhangxiaosan.top.controller.TestController.Test1
Aop---> :com.zhangxiaosan.top.controller.TestController@6d0114c0
Aop---> :com.zhangxiaosan.top.controller.TestController@6d0114c0
Aop--Before->End!
------toDo------
Aop-After->Begin:
Aop---包名和方法:com.zhangxiaosan.top.controller.TestController.Test1
Aop---> :com.zhangxiaosan.top.controller.TestController@6d0114c0
Aop---> :com.zhangxiaosan.top.controller.TestController@6d0114c0
Aop--After->End!
举例,打印访问控制器中的方法时,将请求方式,请求地址,请求参数打印出来
/***
* 执行方法之前切入
* @param joinPoint
*/
@Before("logScanPackages()")
public void logBeforeController(JoinPoint joinPoint){
log.info("开始请求的地址:"+joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
//Object[] args = joinPoint.getArgs();
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
String method = request.getMethod();
log.info("请求方式:"+method);
Map<String, String[]> parameterMap = request.getParameterMap();
parameterMap.forEach((key,val)->{
for(String item : val){
log.info("参数 "+key+" : "+item);
}
});
}