[spring boot] AOP 설정
작성일자 : 2019.07.21
환경 : Spring Boot 2.1.6, Gradle 3
추가 및 수정 파일
0. 기본 개념
1) 관점(Aspect)
구현하고자 하는 횡단 관심사의 기능, 한개 이상의 포인트컷과 어드바이스의 조합으로 만들어진다.
2) 조인포인트(Join point)
관점(Aspect)를 삽입하여 어드바이스가 적용될 수 있는 위치
3) 어드바이스(Advice)
관점(Aspect)의 구현체로 조인 포인트에 삽입되어 동작하는 코드
1. AOP 의존성 추가
build.gradle
.. dependencies { .. compile('org.springframework.boot:spring-boot-starter-aop') .. }
|
2. AOP 사용 설정
ProjectApplication.java
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.EnableAspectJAutoProxy; @SpringBootApplication @EnableAspectJAutoProxy // Enable AOP public class AoptestApplication { public static void main(String[] args) { SpringApplication.run(AoptestApplication.class, args); } } |
3. AOP를 적용할 대상 구현
AopController.java
package com.example.demo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; @RestController public class AopController { private static final Logger logger = LoggerFactory.getLogger(AopController.class); @GetMapping("/hello") public void hello(){ logger.info("hello AOP"); } } |
4. AOP 설정 파일 추가
AopConfig.java
package com.example.demo; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Aspect @Component public class AopConfig{ private static final Logger logger = LoggerFactory.getLogger(AopConfig.class); @Before("execution(* com.example.demo.AopController.*(..))") public void doSomethingBefore() { logger.info("AOP Test : Before "); } @After("execution(* com.example.demo.AopController.*(..)) ") public void doSomethingAfter() { logger.info("AOP Test : After"); } } |
적용 대상의 실행 전,후에 각각 aspect 동작하도록 설정
# Advice 종류
@Before : 조인포인트 전에 실행
@AfterReturning : 조인포인트에서 성공적으로 리턴 된 후 실행
@AfterThrowing : 예외가 발생하였을 경우 실행
@After : 조인포인트에서 메서드의 실행결과에 상관없이 무조건 실행
@Around : 조인포인트의 전 과정(전, 후)에 수행
# execution 포인트컷 예
execution([수식어] [리턴타입] [클래스이름] [이름]([파라미터])
5. 확인
대상 접근
로그 확인
'Java' 카테고리의 다른 글
[Spring] Cache 적용 (0) | 2019.09.28 |
---|---|
Spring Boot + MySQL 연동 (0) | 2019.09.14 |
[Spring Boot-Vue] 프로젝트 빌드 (0) | 2019.07.21 |
[Spring Boot] JPA(Hibernate) 적용 (0) | 2019.07.06 |
[Spring Boot] Eclipse 내 Lombok 설치 (0) | 2019.07.05 |