티스토리 뷰
반응형
다음은 사용자 지정 Annotation에서 선택적 요소 및 추가 속성을 정의하는 방법입니다.
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/* JavaScriptMethod.java */
@Retention(RetentionPolicy.RUNTIME)
public @interface JavaScriptMethod {
String value(); // Required element
int count() default 1; // Optional element with a default value
String[] tags() default {}; // Optional element of array type with a default value
boolean enabled() default true; // Optional element of boolean type with a default value
Level level() default Level.INFO; // Optional element of enum type with a default value
// Additional annotation properties (annotation meta-annotations) can be added here
// Enum type for the 'level' element
enum Level {
INFO,
WARNING,
ERROR
}
}
@JavaScriptMethod Annotation:
- value() 요소는 기본값이 없는 필수 요소입니다. 기본값이 지정되어 있지 않으므로 주석을 사용할 때 반드시 제공되어야 합니다.
- count() 요소는 기본값이 1인 선택적 요소입니다. 값이 명시적으로 제공되지 않으면 기본값은 1입니다.
- tags() 요소는 빈 배열을 기본값으로 하는 배열 유형(String[])의 선택적 요소입니다. 값이 제공되지 않으면 기본적으로 빈 배열이 됩니다.
- enabled() 요소는 기본값이 true인 부울 유형의 선택적 요소입니다. 값이 명시적으로 제공되지 않으면 기본값은 true입니다.
- level() 요소는 기본값이 Level.INFO인 enum 유형(Level)의 선택적 요소입니다. 값이 제공되지 않으면 기본값은 Level.INFO입니다.
주석에 대한 특정 요구 사항에 따라 요소 및 해당 유형을 사용자 정의할 수 있습니다.
또한 사용 사례에 필요한 메타 주석(주석 속성)을 추가할 수 있습니다.
다음은 선택적 요소와 함께 JavaScriptMethod Annotation을 사용하는 예입니다.
@JavaScriptMethod(value = "performAction", count = 3, tags = {"tag1", "tag2"},
enabled = true, level = JavaScriptMethod.Level.WARNING)
public void performAction() {
// Method implementation
System.out.println("Performing action...");
}
performAction() 메서드는 @JavaScriptMethod로 Annotation 처리됩니다. Annotation의 모든 선택적 요소에 대한 값을 지정합니다.
- value 요소는 "performAction"으로 설정되고,
- count 요소는 3으로 설정되고,
- tags 요소는 {"tag1", "tag2"}로 설정되고,
- enabled 요소는 true로 설정되고,
- level 요소는 JavaScriptMethod.Level.WARNING로 설정됩니다.
사용자지정 어노테이션을 사용할 때 요구 사항에 따라 선택적 요소의 값을 사용자 정의할 수 있습니다.
다음은 DTO에서 원하는 Method만을 뽑아 따로 어노테이션을 지정하고 javascript를 Java에 바인딩하는 예 입니다.
public V8Object exec(TestDTO rec, String js) {
V8 runtime = new V8Object(this.runtime);
V8Object v8obj = new V8Object(this.runtime);
runtime.add("This", v8obj);
this.registerMethods(runtime, v8obj, rec);
return v8obj;
}
private void registerMethods(V8Object v8obj, Object obj) {
Method[] methods = obj.getClass().getMethods();
for (Method method : methods) {
JavaScriptMethod annotation = method.getAnnotation(JavaScriptMethod.class);
if (annotation != null) {
String methodName = method.getName();
if(annotation.level() == JavaScriptMethod.Level.WARNING) {
v8obj.registerJavaMethod(obj, methodName, methodName, method.getParameterTypes());
}
else if(annotation.level() == JavaScriptMethod.Level.INFO) {
// something..
}
else if(annotation.level() == JavaScriptMethod.Level.ERROR) {
// something..
}
}
}
}
반응형
'Devolopment > JAVA' 카테고리의 다른 글
[Java] Map에서 입력받은 값의 근사치를 얻는 메서드 예제 (Find the closest value in the map.) (0) | 2023.07.03 |
---|---|
Hexadecimal과 RGB(Red, Green, Blue)로 표현된 색상을 서로 변환하거나 Decimal code로 변형하는 Java 코드 예제 (0) | 2023.06.09 |
[J2V8] Java로 만들어진 사칙연산 함수를 javascript구문을 입력받아 실행하는 예제 (0) | 2023.05.19 |
수식 문자열을 받아 사칙연산 (괄호, sqrt, abs, power 포함) 수행하는 Java Code (0) | 2023.03.10 |
lucene-analysis-nori 사전교체 방법 (0) | 2020.02.25 |
반응형
최근에 달린 댓글