Spring Boot配置AOPカット面
3342 ワード
インポートの依存
org.springframework.boot
spring-boot-starter-aop
注釈解釈@Aspect:
@Component: Spring
@Pointcut: , 。
@Before: 。
@After: 。
@AfterReturning: , 。
@AfterThrowing: , 。
断面管理ログを使う@Aspect
@Component
public class LogAspectHandler {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* , com.itcodai.course09.controller
* *:
* *:
* *:
* ..:
*/
@Pointcut("execution(* com.code.controller..*.*(..))")
public void pointCut() {}
/**
*
* @param joinPoint jointPoint
*/
@Before("pointCut()")
public void doBefore(JoinPoint joinPoint) {
logger.info("====doBefore ====");
//
Signature signature = joinPoint.getSignature();
//
String declaringTypeName = signature.getDeclaringTypeName();
//
String funcName = signature.getName();
logger.info(" : {}, {} ", funcName, declaringTypeName);
// , url ip
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// url
String url = request.getRequestURL().toString();
// ip
String ip = request.getRemoteAddr();
logger.info(" url :{},ip :{}", url, ip);
}
/**
*
* @param joinPoint jointPoint
*/
@After("pointCut()")
public void doAfter(JoinPoint joinPoint) {
logger.info("====doAfter ====");
Signature signature = joinPoint.getSignature();
String method = signature.getName();
logger.info(" {} ", method);
}
/**
* ,
* @param joinPoint joinPoint
* @param result result
*/
@AfterReturning(pointcut = "pointCut()", returning = "result")
public void doAfterReturning(JoinPoint joinPoint, Object result) {
Signature signature = joinPoint.getSignature();
String classMethod = signature.getName();
logger.info(" {} , :{}", classMethod, result);
//
logger.info(" :{}", result + " ");
}
/**
* ,
* @param joinPoint jointPoint
* @param ex ex
*/
@AfterThrowing(pointcut = "pointCut()", throwing = "ex")
public void afterThrowing(JoinPoint joinPoint, Throwable ex) {
Signature signature = joinPoint.getSignature();
String method = signature.getName();
//
logger.info(" {} , :{}", method, ex);
}
}
テスト@RestController
@RequestMapping("/aop")
public class AopController {
@GetMapping("/{name}")
public String testAop(@PathVariable String name) {
return "Hello " + name;
}
}