> Java > java지도 시간 > 런타임에 클래스 정의의 주석 문자열 매개변수를 어떻게 수정할 수 있습니까?

런타임에 클래스 정의의 주석 문자열 매개변수를 어떻게 수정할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-13 11:47:10
원래의
854명이 탐색했습니다.

How Can I Modify a Class Definition's Annotation String Parameter at Runtime?

런타임에 클래스 정의의 주석 문자열 매개변수 수정

소개

사전 컴파일된 클래스를 가져오고 클래스 경로의 일부인 시나리오에서는 런타임 시 주석 문자열 매개변수를 수정하는 것이 바람직할 수 있습니다. 이 문서에서는 이를 달성하기 위한 가능한 접근 방식을 살펴봅니다.

해결책

특정 주석의 특정 키에 대한 주석 값을 변경하려면 다음 단계를 따르세요.

  1. 다음을 사용하여 주석에 대한 호출 핸들러를 검색합니다. Proxy.getInvocationHandler(annotation):

    Object handler = Proxy.getInvocationHandler(annotation);
    로그인 후 복사
  2. 선언된 필드에 액세스하고 접근성을 true로 설정하여 처리기에서 memberValues ​​필드를 가져옵니다.

    Field f = handler.getClass().getDeclaredField("memberValues");
    f.setAccessible(true);
    로그인 후 복사
  3. memberValues를 다음과 같이 검색합니다. 지도:

    Map<String, Object> memberValues = (Map<String, Object>) f.get(handler);
    로그인 후 복사
  4. 키를 사용하여 지도에서 이전 값을 검색합니다.

    Object oldValue = memberValues.get(key);
    로그인 후 복사
  5. 새 값으로 지도 업데이트 :

    memberValues.put(key, newValue);
    로그인 후 복사

사용법 예

다음 주석이 달린 클래스를 고려하세요.

@ClassAnnotation("class test")
public static class TestClass {
    @FieldAnnotation("field test")
    public Object field;
    
    @MethodAnnotation("method test")
    public void method() {}
}
로그인 후 복사

런타임에 주석 값을 수정하려면 다음 코드를 사용하세요.

Field field = TestClass.class.getField("field");
final FieldAnnotation fieldAnnotation = field.getAnnotation(FieldAnnotation.class);
System.out.println("old FieldAnnotation = " + fieldAnnotation.value());
changeAnnotationValue(fieldAnnotation, "value", "another field annotation value");
System.out.println("modified FieldAnnotation = " + fieldAnnotation.value());
로그인 후 복사

이 접근 방식을 사용하면 동적으로 다음을 수행할 수 있습니다. 새 주석 인스턴스를 생성하지 않고 주석 매개변수를 수정하여 구체적인 주석 클래스에 대한 사전 지식의 필요성을 줄입니다.

위 내용은 런타임에 클래스 정의의 주석 문자열 매개변수를 어떻게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿