사용자 정의 annotation 사용 방법

오늘 기분이 정말 언았는데, 회사가 뜻밖에도 이렇게 사람을 깔보는 것을 발견하였다.에이.눈물을 흘리네...직업을 바꾸다
며칠 전에 실례를 들어 annotation을 사용자 정의하는 방법을 정리했습니다. 이것은 우리가 이전에 언급한 봉인된ldap 기층의 맵을 완전히 업데이트할 수 있습니다.
우선 이전 코드부터 annotation을 만듭니다
package com.annotation.pengbo.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UserAttribute {
    public String value() default "";
    public String name() default "";
}

위의 세 개의 @ 속성은 더 이상 말하지 않겠습니다. 두 개의 값을 부여할 수 있는 속성은 하나는value, 즉 기본값이고, 다른 하나는name값을 부여할 때\name =\\"\"로 써야 합니다.
이것은 일반 클래스의 속성에 사용되는 것이다.
다음은 클래스 이름에 사용할
package com.annotation.pengbo.annotation;
import java.lang.annotation.Documented;
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)
@Documented
public @interface UserClass {
    public String value()  default "";
}

설명하지 않겠습니다. 다음은 실체를 써서 이 두 개의 주해를 어떻게 사용했는지 보여 드리겠습니다
package com.annotation.pengbo.model;
import com.annotation.pengbo.annotation.UserAttribute;
import com.annotation.pengbo.annotation.UserClass;
@UserClass("user")
public class User {
    @UserAttribute(name="uu")
    private String uuid;
    @UserAttribute
    private String name;
//get、set  ...

그들의 속성에 대응하는 값을 설정하다.
다음은 어떻게 사용하는지 봅시다.
다음은 사용자 정의 메모와 메모의 값을 얻는 것입니다.
public void explainAnnotation(T t) throws Exception {
    Class<?> entity =t.getClass();
           //   UserClass   
    UserClass annotation = entity.getAnnotation(UserClass.class);
           //      value 
    System.out.println(annotation.value());
   //  T(  )    
    System.out.println(entity.getName());
    for( Field f : entity.getDeclaredFields() ) {
                   //         
        f.setAccessible(true);
                   //          UserAttribute   
        UserAttribute s =(UserAttribute) f.getDeclaredAnnotations()[0];
                   //       
        System.out.println(s.name());
               //         
           System.out.println(f.getName());
               //        
           Object fieldVal = f.get(t);
               //    
           System.out.println(fieldVal);
    }
                                                             
}

아래의 방법은 어떻게 값을 실체에 부여하는가
         public <T> T setAnnotation(Class<?> entity) throws Exception {
//           Class<?> entity =t.getClass();
//          UserClass annotation = entity.getAnnotation(UserClass.class);
                //         
             String fieldName = entity.getName();
             System.out.println(fieldName);
                //    
            T t= (T) entity.newInstance();
             for( Field f : entity.getDeclaredFields() ) {
                //    (                   ,  public)
                                 f.setAccessible(true);
                                //      ,    
                    f.set(t, "hello uuuu");
                    System.out.println(f.getName());
             }
                        //   
            return t;
         }

앞의 몇 단락의 코드를 이해하지 못하더라도 상관없다. 여기저기 널려 있다. 주해를 어떻게 만드는지 많은 설명을 뒤적일 수 있다. 중점은 뒤의 두 개, 어떻게 가져오고 설정하는가이다.이것은 단지 간단한 조작일 뿐,api가 제공하는 방법을 구체적으로 조사할 수 있다

좋은 웹페이지 즐겨찾기