-
15. demo1.annotation - (10) NotNullAnnotationProcessor Demo ( 어노테이션2 )java/코드 리뷰 2020. 4. 27. 14:091234567891011121314151617package demo1.annotation;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Retention;import java.lang.annotation.Target;@Retention(RUNTIME)@Target(FIELD)public @interface NotNull {// 어노테이션 요소 정의String message();}1234567891011121314151617181920212223242526272829303132333435363738394041424344package demo1.app;import demo1.annotation.NotNull;public class User {@NotNull(message = "이름은 필수 입력값입니다.")String name;@NotNull(message = "이메일은 필수 입력값입니다.")String email;String tel;public User() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}}12345678910111213141516171819202122232425262728293031323334353637383940414243444546package demo1.app;import java.lang.reflect.Field;import demo1.annotation.NotNull;public class NotNullAnnotationProcessor {public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {User user = new User();user.setName("홍길동");Class clz = user.getClass();// User 객체에 선언된 멤버변수(필드) 모두 조회Field[] fields = clz.getDeclaredFields();for (Field field : fields) {// 필드명 조회String fieldName = field.getName();// 해당 필드가 @NotNull 에노테이션이 부착되어 있는지 확인boolean isNotNullField = field.isAnnotationPresent(NotNull.class);if (isNotNullField) {// 해당 필드에 저장된 값 조회String value = (String) field.get(user);System.out.println("필드명: " + fieldName + ", " + value);// 필드의 값이 null 이라면if (value == null) {// 필드에 부착된 NotNull 어노테이션 객체 획득NotNull annotation = field.getAnnotation(NotNull.class);// 어노테이션의 구성요소 중 message의 값 조회String message = annotation.message();// 메시지값 화면에 출력System.out.println("에러 메시지 " + message);}field.getClass();}}}}
'java > 코드 리뷰' 카테고리의 다른 글
16. bytestream - (2) FileCopyDemo2 ( 파일 복사 - 반복문 ) (0) 2020.04.27 16. bytestream - (1) FileCopyDemo1 ( 파일 복사 ) (0) 2020.04.27 15. demo1.annotation - (9) MyAnnotationProcessor Demo ( 어노테이션1 ) (0) 2020.04.27 15. demo1 - (8) Child Demo ( @Deprecated ) (0) 2020.04.27 15. demo2 - (7) DepositRateDemo ( 열거형 멤버변수 ) (0) 2020.04.27