Backend/Spring Boot

AOP @Around ์–ด๋…ธํ…Œ์ด์…˜

Leeseojune53 2023. 6. 27. 23:15

๐Ÿ“Œ ์ •์˜

Advice์˜ ํ•œ ์ข…๋ฅ˜๋กœ ํ•ต์‹ฌ ๊ด€์‹ฌ์‚ฌ์˜ ์‹คํŒจ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์ „ ํ›„๋กœ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” Advice์ด๋‹ค.

Advice๋Š” ์‹ค์งˆ์ ์œผ๋กœ ์–ด๋–ค ์ผ์„ ํ•ด์•ผํ• ์ง€์— ๋Œ€ํ•œ ๊ฒƒ, ์ฆ‰ ์‹ค์งˆ์ ์ธ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๋‹ด์€ ๊ตฌํ˜„์ฒด์ด๋‹ค.

๐Ÿ˜‰ ์‚ฌ์šฉ๋ฒ•

Pointcut๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. Pointcut๋Š” ํšก๋‹จ๊ด€์‹ฌ์‚ฌ(๋ถ€๊ฐ€๊ธฐ๋Šฅ)์ด ์ ์šฉ๋  joinPoint๋“ค์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค.

1๏ธโƒฃ execution

@Pointcut(“execution(์ ‘๊ทผ์ œ์–ด์ž, ๋ฐ˜ํ™˜ํ˜• ํŒจํ‚ค์ง€ํฌํ•จ ํด๋ž˜์Šค ๊ฒฝ๋กœ ๋ฉ”์†Œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ)”)

  • execution(* *(..))๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๊ฐœ์ˆ˜ ์ƒ๊ด€ X
  • ์ ‘๊ทผ์ œ์–ด์ž, ๋ฐ˜ํ™˜ํ˜• ๋ชจ๋‘ ์ƒ๊ด€ X, ์–ด๋– ํ•œ ๊ฒฝ๋กœ์— ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค๋„ ์ƒ๊ด€ํ•˜์ง€ ์•Š๊ณ  ์ ์šฉ.
  • execution(* test.spring..*(..))
  • ์ ‘๊ทผ์ œ์–ด์ž, ๋ฐ˜ํ™˜ํ˜• ๋ชจ๋‘ ์ƒ๊ด€ X, test.spring ํ•˜์œ„ ํŒจํ‚ค์ง€, ํด๋ž˜์Šค ์ ์šฉ, ๋ฉ”์†Œ๋“œ๋ช… ์ƒ๊ด€ X, ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ๊ด€ X

2๏ธโƒฃ within

ํŒจํ‚ค์ง€ ๋‚ด์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์— ์ ์šฉํ•  ๋•Œ ์‚ฌ์šฉ.

@Pointcut(“within(Class ๊ฒฝ๋กœ)”)

  • within(com.java.ex.*)
  • com.java.ex. ํ•˜์œ„์˜ ๋ชจ๋“  ํด๋ž˜์Šค, ๋ชจ๋“  ๋ฉ”์†Œ๋“œ
  • within(com.java.ex..*)
  • com.java.ex. ํŒจํ‚ค์ง€์˜ ํ•˜์œ„ ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ

3๏ธโƒฃ bean

ํ•ด๋‹น bean id๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” bean์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์— ์ ์šฉ

@Pointcut(“bean(bean id)”)

  • bean(car)
  • car๋ผ๋Š” bean id๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” bean์— ์ ์šฉ

4๏ธโƒฃ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜

@Pointcut(“@annotation(์–ด๋…ธํ…Œ์ด์…˜ ๋ช…)”)