Introduce ARE4j - a common Annotation Resolving Engine for Java

4413 단어 Java Annotation
ARE4j 는 자바 에 사용 되 는 범용 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 입 니 다.보 시 는 것 을 환영 합 니 다.
 

좋은 웹페이지 즐겨찾기