From d7b56bce87ba28bbadd5fe3e8eddf756bf9e95cf Mon Sep 17 00:00:00 2001 From: toychip Date: Fri, 22 Mar 2024 22:19:57 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=A0=EA=B8=89=ED=8E=B8/=EC=84=B9=EC=85=981?= =?UTF-8?q?1:=20=EC=98=88=EC=A0=9C=20=EB=A7=8C=EB=93=A4=EA=B8=B0=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 섹션11: 스프링 AOP - 포인트컷 --- .../java/hello/aop/member/MemberService.java" | 5 ++++ .../hello/aop/member/MemberServiceImpl.java" | 19 ++++++++++++ .../aop/member/annotation/ClassAop.java" | 11 +++++++ .../aop/member/annotation/MethodAop.java" | 12 ++++++++ .../hello/aop/pointcut/ExecutionTest.java" | 30 +++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 "\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberService.java" create mode 100644 "\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberServiceImpl.java" create mode 100644 "\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/ClassAop.java" create mode 100644 "\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/MethodAop.java" create mode 100644 "\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/test/java/hello/aop/pointcut/ExecutionTest.java" diff --git "a/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberService.java" "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberService.java" new file mode 100644 index 0000000..cf051a1 --- /dev/null +++ "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberService.java" @@ -0,0 +1,5 @@ +package hello.aop.member; + +public interface MemberService { + String hello(String param); +} diff --git "a/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberServiceImpl.java" "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberServiceImpl.java" new file mode 100644 index 0000000..4d194af --- /dev/null +++ "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/MemberServiceImpl.java" @@ -0,0 +1,19 @@ +package hello.aop.member; + +import hello.aop.member.annotation.ClassAop; +import hello.aop.member.annotation.MethodAop; +import org.springframework.stereotype.Component; + +@ClassAop +@Component +public class MemberServiceImpl implements MemberService { + @Override + @MethodAop("test value") + public String hello(final String param) { + return "ok"; + } + + public String internal(String param) { + return "ok"; + } +} diff --git "a/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/ClassAop.java" "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/ClassAop.java" new file mode 100644 index 0000000..65ff449 --- /dev/null +++ "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/ClassAop.java" @@ -0,0 +1,11 @@ +package hello.aop.member.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface ClassAop { +} diff --git "a/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/MethodAop.java" "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/MethodAop.java" new file mode 100644 index 0000000..32edb92 --- /dev/null +++ "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/main/java/hello/aop/member/annotation/MethodAop.java" @@ -0,0 +1,12 @@ +package hello.aop.member.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface MethodAop { + String value(); +} diff --git "a/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/test/java/hello/aop/pointcut/ExecutionTest.java" "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/test/java/hello/aop/pointcut/ExecutionTest.java" new file mode 100644 index 0000000..5915b55 --- /dev/null +++ "b/\354\212\244\355\224\204\353\247\201 \353\241\234\353\223\234\353\247\2655 \352\263\240\352\270\211\355\216\270/aop/src/test/java/hello/aop/pointcut/ExecutionTest.java" @@ -0,0 +1,30 @@ +package hello.aop.pointcut; + +import hello.aop.member.MemberServiceImpl; +import java.lang.reflect.Method; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.aop.aspectj.AspectJExpressionPointcut; + +@Slf4j +public class ExecutionTest { + + AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); + Method helloMethod; + + @BeforeEach + public void init() throws NoSuchMethodException { + // 테스트에서 실행할 수 있게 getMethod()를 추출해서 helloMethod에 보관 + helloMethod = MemberServiceImpl.class.getMethod("hello", String.class); + } + + @Test + void printMethod() { + + // 앞으로 알아볼 execution으로 시작하는 포인트컷 표현식은 이 메서드 정보를 매칭해서 포인트컷 대상을 찾아낸다. + // execution(* ..package..Class.) + // public java.lang.String hello.aop.member.MemberServiceImpl.hello(java.lang.String) + log.info("helloMethod={}", helloMethod); + } +}