Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다단계 페이지 테이블
- Shared Page
- 메모리의 불연속적 할당
- Effective Access Time
- 2단계 Page Table
- springboot
- 프로세스 할당
- 프로세스 동기화
- Page Table의 구현
- linux
- 알고리즘
- 리눅스
- 메모리 관리
- Allocation of Physical Memory
- 스프링부트
- 자바 문제풀이
- annotation
- jpa
- spring
- 스프링
- 웹개발
- 자바 알고리즘
- 코드스테이츠 백엔드 과정 39기
- 문제풀이
- 프로세스 불연속 할당
- CS
- Inverted Page Table
- 운영체제
- Segmentation with Paging
- 웹 프로그래밍
Archives
- Today
- Total
GrowMe
[Spring]AOP를 코드 + a 로 쉽게 이해해보자 본문
AOP(Aspect-Oriented Programming)
# AOP
# 부가기능
# AOP 사용법
# Advice
# PointCut
*AOP란?

- 부가 기능(advice)을 동적(실행 중에)으로 추가해주는 기술
- Spring의 경우 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가해주는 것!
*AOP의 사용법
1. 부가기능 Aspect1 클래스를 불러와서, 호출하는 original 메서드의 앞 or 뒤 or 앞뒤에

- original 메서드 : orderService.orderItem()
- @Import : 부가기능 Aspect1 모듈을 불러와 적용시킨다.
- @Autowired : 빈에 등록되있는 객체를 주입한다.

- 맨 위 AopTest 클래스에서 주입받은 OrderService

- 맨 위 AopTest 클래스에서 주입받은 OrderRepository
2. @Aspect 어노테이션이 붙어 있는 모듈(Aspect1)의 메서드 logging()을 붙여서

- Aspect1 : 부가기능을 모아놓은 모듈
- @Aspect : Aspect임을 명시
- original 메서드 실행 : joinPoint.proceed()
- @Around : original 메서드의 앞뒤를 부가기능으로 감싼다. (해당 예제는 original 위에만 존재 -> 호출도 위에만 됨)
- @execution : 해당 모듈이 적용될 경로를 지정한다. (이를 포인트컷 개념이라 함)
- logging : Aspect1 클래스의 메서드로서, Aspect1 어스펙트의 어드바이스(Advice) == 부가기능
3. 최종 호출한다.

*메소드의 앞뒤 위치 지정 방법은? : Advice의 종류
종 류 | 애너테이션 | 설 명 |
around advice | @Around | 메서드 시작과 끝 부분에 추가되는 부가 기능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가 기능 |
after returning | @AfterReturning | 예외 발생 안했을 시, 실행되는 부가 기능 |
after throwing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 |
*어떤 메소드에 적용할지 정하는 법은? : Pointcut 표현식
- 경로를 지정하여 정한다.
- 문법 : execution(반환타입 패키지명.클래스명.메서드명(매개변수 목록))
- * :모든 ~ ~ (ex : execution(* com.xyz.service.*.*(..))
-> com.xyz.service 패키지 내 모든 클래스들의 모든 메서드에 적용
종 류 | 설 명 |
execution | 메서드 실행 조인트 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하며, 기능도 복잡하다. |
within | 특정 타입 내의 조인 포인트를 매칭한다. |
args | 인자가 주어진 타입의 인스턴스인 조인 포인트 |
this | 스프링 빈 객체(스프링 AOP 프록시)를 대상으로 하는 조인 포인트 |
target | Target 객체(스프링 AOP 프록시가 가르키는 실제 대상)를 대상으로 하는 조인 포인트 |
@target | 실행 객체의 클래스에 주어진 타입의 애너테이션이 있는 조인 포인트 |
@within | 주어진 애너테이션이 있는 타입 내 조인 포인트 |
@annotation | 메서드가 주어니 애너테이션을 가지고 있는 조인 포인트를 매칭 |
@args | 전달된 실제 인수의 런타임 타입이 주어진 타입의 애너테이션을 갖는 조인 포인트 |
bean | 스프링 전용 포인트컷 지시자이고 빈의 이름으로 포인트컷을 지정한다. |
'About Spring' 카테고리의 다른 글
[Spring] DTO의 개념과 그 활용 방법 (0) | 2022.06.27 |
---|---|
[Spring]DI를 코드 + a로 쉽게 이해해보자 (0) | 2022.06.27 |
SpringBoot 주요 애너테이션과 메서드 및 주의사항(지속 업데이트 중) (0) | 2022.06.19 |
[Spring 설정]Mybatis와 SqlSessionTemplate (2) | 2022.06.12 |
Spring FrameWork와 MVC 패턴 (0) | 2022.06.05 |
Comments