3.7.2 by sh
3.7.2. Bean Validation Provider 구성
스프링은 Bean Validation API를 완벽하게 지원합니다. 여기에는 JSR-303 또는 JSR-349 Bean Validation Provider를 스프링 빈으로서 부트스트랩 하기 위한 편리한 지원이 포함됩니다. 이를 통해 응용 프로그램에서 유효성 검사가 필요한 어느 곳에서든지 javax.validation.ValidatorFactory또는 javax.validation.Validator를 주입할 수 있습니다.
다음 예제와 같이 LocalValidatorFactoryBean을 사용하여 기본 Validator를 스프링 빈으로 구성할 수 있습니다.
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>앞의 예제의 기본 구성은 기본 부트스트랩 메커니즘을 사용하여 초기화하기 위해 빈 유효성 검사를 트리거 합니다. Hibernate Validator와 같은 JSR-303 또는 JSR-349 Provider는 클래스 패스에 있을 것으로 예상되며 자동으로 감지됩니다.
Validator 주입
LocalValidatorFactoryBean은 스프링의 org.springframework.validation.Validator뿐만 아니라 javax.validation.ValidatorFactory와 javax.validation.Validator를 모두 구현합니다. 이러한 인터페이스 중 하나에 대한 참조를 Validation 로직을 호출해야하는 빈에 삽입할 수 있습니다.
다음 예제와 같이 Bean Validation API를 직접 사용하려는 경우 javax.validation.Validator에 대한 참조를 삽입할 수 있습니다.
import javax.validation.Validator;
@Service
public class MyService {
@Autowired
private Validator validator;다음 예제와 같이 빈이 스프링 Validation API를 필요로 한다면 org.springframework.validation.Validator에 대한 참조를 삽입할 수 있습니다.
import org.springframework.validation.Validator;
@Service
public class MyService {
@Autowired
private Validator validator;
}사용자 정의 제약 조건 구성
각 빈 유효성 검증 제약 조건은 다음의 두 부분으로 구성됩니다. “제약 조건 및 구성 가능한 속성들을 선언하는 @Constraint 어노테이션”. “제약 조건의 동작을 구현하는 javax.validation.ConstraintValidator 인터페이스의 구현”.
선언과 구현을 연결하기 위해 각 @Constraint어노테이션은 해당하는 ConstraintValidator구현 클래스를 참조합니다. 런타임 시 ConstraintValidatorFactory는 도메인 모델에서 Constraint 어노테이션이 발생할 때 참조된 구현을 인스턴스 화합니다.

기본적으로 LocalValidatorFactoryBean은 스프링을 사용하여 ConstraintValidator인스턴스를 생성하는 SpringConstraintValidatorFactory를 구성합니다. 이를 통해 사용자 정의 ConstraintValidators는 다른 스프링 빈처럼 의존성 주입의 이점을 얻을 수 있습니다.
다음 예제는 의존성 주입을 위해 스프링을 사용하는 관련 ConstraintValidator구현이 따르는 사용자 정의 @Constraint 선언을 보여줍니다.
@Target({ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MyConstraintValidator.class)
public @interface MyConstraint {
}import javax.validation.ConstraintValidator;
public class MyConstraintValidator implements ConstraintValidator {
@Autowired;
private Foo aDependency;
...
}앞의 예제에서 볼 수 있듯이, ConstraintValidator구현은 다른 스프링 빈과 마찬가지로 @Autowired를 가질 수 있습니다.
스프링 기반 메소드 유효성 검사
다음과 같이 Bean Validation 1.1에서 지원되는 메소드 유효성 검사 기능(그리고 사용자 정의 확장 기능, 또한 Hibernate Validator 4.3에 의해)을 MethodValidationPostProcessor빈 정의를 통해 스프링 컨텍스트에 통합할 수 있습니다.
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>스프링 기반 메소드 유효성 검사를 받기 위해서는 모든 대상 클래스에 스프링의 @Validated어노테이션을 추가해야 합니다. Hibernate Validator와 Bean Validation 1.1 Provider의 설치에 대한 자세한 정보는 MethodValidationPostProcessorjavadoc를 참고하십시오. (옵션으로, 사용할 Validation 그룹을 선언할 수도 있습니다)

추가 구성 옵션
대부분의 경우에는 기본 LocalValidatorFactoryBean구성으로 충분합니다. 메시지 보간에서 순회 해석에 이르기까지 다양한 빈 유효성 검증 구조에 대한 여러 가지 구성 옵션이 있습니다. 이러한 옵션에 대한 자세한 내용은 LocalValidatorFactoryBeanjavadoc javadoc을 참조하십시오.
Last updated
Was this helpful?