사용자 정의 annotation 사용 방법
4020 단어 사용자 정의 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가 제공하는 방법을 구체적으로 조사할 수 있다