Spring Boot配置AOPカット面


インポートの依存

	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;
    }
}