Introduce ARE4j - a common Annotation Resolving Engine for Java
4413 단어 Java Annotation
1.ARE4j 는 Annotation 을 해석 하 는 일반적인 엔진 을 제공 합 니 다.모든 종류의 사용자 정의 annotation 을 분석 할 수 있 습 니 다.
2.프레임 이나 용기 가 아 닌 엔진 으로 설 계 된 이 유 는 기 존 코드 에 미 치 는 영향 을 최소 화 할 수 있 기 때 문 입 니 다.프로젝트 가 잘 응용 되 고 있 는 공장 모델 이 라면 Factory 류 를 간단하게 교체 하거나 재 작성 하면 ARE4j 를 사용 하여 코드 중의 Annotation 을 분석 할 수 있 습 니 다.
3.ARE4j 는 javassist 에 만 의존 하여 기 존 프로젝트 에 아무런 영향 을 주지 않 습 니 다.
4.ARE4j 는 매우 간단 하고 사용 하기 쉽다.
Scannotation 과 Jandex 는 다른 두 개의 Annotation 도구 입 니 다.Scannotation 은 실행 할 때 Jar 와 Classpath 를 스 캔 하고 index 를 메모리 에 저장 할 수 있 습 니 다.Jandex 는 컴 파일 시간 에 코드 를 스 캔 하고 index 를 파일 에 저장 합 니 다.Scannotation 과 Jandex 는 annotation 을 발견 하고 실행 할 때 annotation 의 색인 속 도 를 높 일 수 있 습 니 다.한편,ARE4j 는 운영 할 때 Class 의 Annotation 을 분석 하여 설계 자가 Annotation 에 대해 실현 하고 자 하 는 논 리 를 실현 한다.
ARE4j 를 사용 하 는 것 은 매우 간단 하 다.Engine 류 와 Resolver 류 를 실현 하기 위해 알 아야 할 몇 개의 인터페이스 만 알 아야 한다.
Engine 은 ARE4j 의 가장 핵심 적 인 클래스 로 Engine 류 를 통 해 ARE4j 에 대한 각종 호출 을 완성 해 야 한다.Engine 클래스 완성 기능:
1. register/unregister annotation resolver class
2. Check if annotation reasonable
3. Create proxy object by javassist
4. Cache annotations while parsing class first time
Engine.newProxyInstance(Classclazz)는 proxy object 를 되 돌려 줍 니 다.실행 할 때 proxy object 는 요구 에 따라 class/constructor/Field/method/Parameter 의 Annotation 을 분석 합 니 다.
Annotation 의 해석 논 리 를 실현 하기 위해 서 는 각종 Annotation Resolver 인 터 페 이 스 를 실현 해 야 합 니 다.모두 5 개의 인터페이스 가 있 습 니 다.
ClassAnnotationResolver, ConstructorAnnotationResolver, FieldAnnotationResolver, MethodAnnotationResolver, ParameterAnnotationResolver。MethodAnnotation Resolver 를 예 로 들 면 Method 에 사용 할 수 있 는 Annotation 을 완전 하 게 해석 하기 위해 서 는 다음 과 같은 방법 이 필요 합 니 다.
이 세 가지 방법 은 대상 구조 이후 방법 이 실행 되 기 전과 방법 이 실 행 된 후에 호출 되 고 관련 코드 가 Annotation 이 원 하 는 논 리 를 실현 할 수 있다.
다음은 간단 한 Example 을 통 해 Annotation 을 정의 하고 Resolver 를 실현 하 며 Engine 을 사용 하 는 방법 을 살 펴 보 겠 습 니 다.완전한 예 는 ARE4j testcase 를 참고 할 수 있 습 니 다.
1.주석 정의
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestMethodAnnotation {
}
2.실현 Resolver
public class TestMethodResolver implements MethodAnnotationResolver {
public void resolveMethodAnnotationAfterConstruct(MethodResolveContext methodResolveContext) throws ResolverException {
}
public void resolveMethodAnnotationBeforeMethod(MethodResolveContext methodResolveContext) throws ResolverException {
methodResolveContext.setParameters(new String[]{"value2_changed"});
}
public void resolveMethodAnnotationAfterMethod(MethodResolveContext methodResolveContext) throws ResolverException {
}
}
3.TestObject 가 Annotation 을 사용 해 야 한다 고 가정 합 니 다.
public class TestObject {
private Object field2 = "value1";
@TestMethodAnnotation
public void setField2_2(Object field2) {
this.field2 = field2;
}
public Object getField2() {
return field2;
}
}
4. TestCase
@Test
public void testMethodAnnotation() throws Exception{
Engine.registerAnnotation(TestMethodAnnotation.class, new TestMethodResolver());
TestObject testObject = Engine.newProxyInstance(TestObject.class);
testObject.setField2_2("");
// TestMethodResolver will check the init value and set value to "value2_change"
Assert.assertEquals("value2_changed", testObject.getField2());
}
이것 이 바로 예 의 전부 입 니 다.Resolver 를 실현 하고 Engine 을 호출 하 는 것 은 매우 간단 합 니 다.
ARE4j 는 어디 에 쓸 수 있 습 니까?
1.사용자 정의 와 해석 이 필요 한 곳 에 사용 할 수 있 습 니 다.
2.Annotation 이 구동 하 는 tool/framework/container 에 기본 라 이브 러 리 로 사용 할 수 있 습 니 다.예 를 들 어 Junit 4 처럼 annotation 의 테스트 프레임 워 크 를 사용 합 니 다.ejb 3 같 아 요. jpa 이런 용기;Permance 테스트 를 위 한 도구 입 니 다.
참고:
https://github.com/yongyang/are4j http://scannotation.sourceforge.net https://github.com/jbossas/jandex
첨부 파일 은 ARE4j 의 설명 PPT 입 니 다.보 시 는 것 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Introduce ARE4j - a common Annotation Resolving Engine for JavaScannotation 과 Jandex 는 다른 두 개의 Annotation 도구 입 니 다.Scannotation 은 실행 할 때 Jar 와 Classpath 를 스 캔 하고 index 를 메모리 에 저장 할 수 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.