From afbe183231899dd6a4a38708feed22d830babe73 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Fri, 19 Feb 2021 20:38:47 +0900 Subject: [PATCH] code manipulation: relfection(annotation) --- .../main/java/org/example/AnnotationApp.java | 30 +++++++++++++++++++ .../src/main/java/org/example/Book.java | 3 ++ .../example/{App.java => ClassApiApp.java} | 2 +- .../main/java/org/example/MyAnnotation.java | 13 ++++++++ .../{AppTest.java => ClassApiAppTest.java} | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 code-manipulation/reflection-example/src/main/java/org/example/AnnotationApp.java rename code-manipulation/reflection-example/src/main/java/org/example/{App.java => ClassApiApp.java} (99%) create mode 100644 code-manipulation/reflection-example/src/main/java/org/example/MyAnnotation.java rename code-manipulation/reflection-example/src/test/java/org/example/{AppTest.java => ClassApiAppTest.java} (90%) diff --git a/code-manipulation/reflection-example/src/main/java/org/example/AnnotationApp.java b/code-manipulation/reflection-example/src/main/java/org/example/AnnotationApp.java new file mode 100644 index 00000000..fab12ed8 --- /dev/null +++ b/code-manipulation/reflection-example/src/main/java/org/example/AnnotationApp.java @@ -0,0 +1,30 @@ +package org.example; + +import java.util.Arrays; + +public class AnnotationApp { + + public static void main(String[] args) { + + // 원하는 필드의 애노테이션의 값 가져오기 + Arrays.stream(Book.class.getDeclaredFields()).forEach(f -> { + Arrays.stream(f.getAnnotations()).forEach(a -> { + if (a instanceof MyAnnotation) { + MyAnnotation myAnnotation = (MyAnnotation) a; + System.out.println(myAnnotation.name()); + System.out.println(myAnnotation.number()); + } + }); + }); + + +// // 필드에 사용한 애노테이션 가져오기 +// Arrays.stream(Book.class.getDeclaredFields()).forEach(f -> { +// Arrays.stream(f.getAnnotations()).forEach(System.out::println); +// }); + + +// // 클래스에 있는 애노테이션 가져오기 +// Arrays.stream(Book.class.getAnnotations()).forEach(System.out::println); + } +} diff --git a/code-manipulation/reflection-example/src/main/java/org/example/Book.java b/code-manipulation/reflection-example/src/main/java/org/example/Book.java index f43e1411..004ab874 100644 --- a/code-manipulation/reflection-example/src/main/java/org/example/Book.java +++ b/code-manipulation/reflection-example/src/main/java/org/example/Book.java @@ -1,7 +1,10 @@ package org.example; + +@MyAnnotation(name = "lee", number = 20) public class Book { + @MyAnnotation private static String B = "BOOK"; private static final String C = "BOOK"; diff --git a/code-manipulation/reflection-example/src/main/java/org/example/App.java b/code-manipulation/reflection-example/src/main/java/org/example/ClassApiApp.java similarity index 99% rename from code-manipulation/reflection-example/src/main/java/org/example/App.java rename to code-manipulation/reflection-example/src/main/java/org/example/ClassApiApp.java index 0ae8e2e0..3247ec5b 100644 --- a/code-manipulation/reflection-example/src/main/java/org/example/App.java +++ b/code-manipulation/reflection-example/src/main/java/org/example/ClassApiApp.java @@ -4,7 +4,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Arrays; -public class App { +public class ClassApiApp { public static void main( String[] args ) throws ClassNotFoundException { diff --git a/code-manipulation/reflection-example/src/main/java/org/example/MyAnnotation.java b/code-manipulation/reflection-example/src/main/java/org/example/MyAnnotation.java new file mode 100644 index 00000000..532e3ed0 --- /dev/null +++ b/code-manipulation/reflection-example/src/main/java/org/example/MyAnnotation.java @@ -0,0 +1,13 @@ +package org.example; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.FIELD}) +@Inherited +public @interface MyAnnotation { + + String name() default "kim"; // 기본값을 주지 않으면 애노테이션 사용시 반드시 값을 넣어야 한다. + + int number() default 100; +} diff --git a/code-manipulation/reflection-example/src/test/java/org/example/AppTest.java b/code-manipulation/reflection-example/src/test/java/org/example/ClassApiAppTest.java similarity index 90% rename from code-manipulation/reflection-example/src/test/java/org/example/AppTest.java rename to code-manipulation/reflection-example/src/test/java/org/example/ClassApiAppTest.java index 6a1d2d79..e52da309 100644 --- a/code-manipulation/reflection-example/src/test/java/org/example/AppTest.java +++ b/code-manipulation/reflection-example/src/test/java/org/example/ClassApiAppTest.java @@ -7,7 +7,7 @@ import org.junit.Test; /** * Unit test for simple App. */ -public class AppTest +public class ClassApiAppTest { /** * Rigorous Test :-)