2012-09-04 1 views
0

Java bean 유효성 검증에 사용할 사용자 정의 어노테이션을 지정했습니다. 나는 내 모든 필드에 대해 동일한 주석 클래스를 사용하여 다음과 같이 필드의 이름으로 문자열 매개 변수를 전달 :Java에서 주석을 언제 어떻게 초기화합니까? 이것을 제어 할 수 있습니까?

@CustomConstraint(value="name") 
private String name; 
@CustomConstraint(value="address1") 
private String addressLine1; 

내 제약 검사기가에 문자열 키 (필드의 이름) 매핑는 HashMap을 유지 내 유효성 검사 클래스의 인터페이스. 나는 정적과 같이 필드의 유효성을 검사하는 데 사용되는 인터페이스의 구상 서브 클래스로 특정 필드 이름을 페어링하여지도를 초기화 :

private static final Map<String, CustomValidatorClass> fieldMapper; 

static { 
    Map<String, CustomValidatorClass> map = new HashMap<String, CustomValidatorClass>(); 
    map.put("name", new NameValidator()); 
    map.put("address1", new Address1Validator()); 
    fieldMapper = Collections.unmodifiableMap(map); 
} 

내 관심이 초기화 과정이 매우 비쌀 수 있다는 것입니다 (내가 가진 수십 필드의), 그리고 그것이 유효성을 검사하는 모든 단일 필드에 대해 초기화 될 수 있습니다. 어노테이션을 한 번 초기화하고 재사용하도록 지정하는 방법이 있거나, 이것이 기본 동작이라고 기대하고 있습니다.

편집 : 콩 검증과 함께 JSF 2.0을 사용하고 있으므로 이러한 주석을 직접 읽거나 부르지는 않습니다. 이것은 프레임 워크에 의해 처리되는데, 그 이유는 정확히 어떻게 작동 하는지를 결정할 수 없었기 때문입니다.

+0

[이 설명서] (http : //www.jcabi.com/jcabi-aspects/jsr-303.html) 당신을 도울 수 – yegor256

답변

0

몇 가지 테스트를했는데 내지도에서 정적 초기화를하는 것은 필드의 유효성 검사를 처음 시도 할 때만 호출되는 것 같습니다. 즉, Annotation이 반복적으로 초기화되지 않고 각 필드에 대해 재사용되고 있음을 의미합니다. 대규모 초기화에서 오버 헤드에 대한 걱정이 이제 해결되었습니다.

0

당신의 질문은 매우 명확하지 않습니다, 당신의 디자인은 나에게 이상한 것 같다

  1. 왜 주석의 필드 이름의 복사합니까? 런타임에 주석을 검사 할 때 어떤 주석이 어느 필드에 바인딩되어 있는지 알 수 있습니다. value이 중복 된 것으로 보입니다.

    @CustomConstraint (값 = "이름 - 필드"))

    타입 필드의 이름 - 필드;

  2. 왜 필드를 정적 맵의 유효성 검사기에 매핑합니까? 당신은 주석을 사용하여이 매핑을 정의 coud :

    @CustomConstraint (발리 = NameValidator.class를)

    타입의 필드 이름의 필드;

나는 대부분의 주석 기반의 검증 프레임 워크의 작동 방식이 예를 들어, 믿고 spring annotation-based validation.

편집

나는 그 주석을 읽을 생각은,이 같은 일을해야합니다

for(Field field : cls.getDeclaredFields()){ 
Class type = field.getType(); 
String name = field.getName(); 
Annotation[] annotations = field.getDeclaredAnnotations(); 
} 

그래서, 특정 주석이 특정 분야에 속하는 방법을 알고있다.

+0

모든 필드에 동일한 주석을 사용하고 있기 때문에 필자는 필드의 이름을 전달합니다. 어노테이션이 적용된 필드의 이름을 얻는 또 다른 방법이 있다면 그것은 나에게 매우 유용 할 것입니다. – user1535568

+0

@ user1535568 가짜 코드 – ewernli

+0

가 추가되었습니다. 이제 제 예제가 명확하지 않고 완료되지 않았 음을 알았습니다. JSF 2.0을 사용하고 있으므로 주석을 직접 읽지 않습니다. 빈 검증 프레임 워크는 JSF와 함께이를 처리합니다. 프로세스가 어떻게 진행되고 있는지 정확하게 판단 할 수 없기 때문에 이것이 내 혼란의 원인이기도합니다. 그러나 일부 테스트 후에는 유효성 검사기가 한 번만 초기화된다는 결론을 얻었으므로 문제가 없습니다. 귀하의 의견을 보내 주셔서 감사합니다! – user1535568