2009-07-30 6 views
1

나는 스프링 MVC를 사용하고 있으며 자바 스크립트의 기본 유효성 검사기를 사용하고 싶습니다. 공통된 추상 클래스와 공통 인터페이스를 구현하는 일련의 유효성 검사기를 확장하는 일련의 컨트롤러가 있습니다.스프링의 자동 동적 바인딩

public abstract class AbstractController { 
protected Validator validator; 
} 

public class FooController extends AbstractController{} 
public class BarController extends AbstractController{} 

public interface Validator {} 
public class FooValidator implementes Validator{} 
public class BarValidator implementes Validator{} 

내가 (FooController.validator이 FooValidator의 인스턴스가 될 수 있도록) 자동 respectivelly 각 콘크리트 컨트롤러에 대한 검증 필드를 설정하고 싶습니다 : 상황은이 같은 것입니다. 일치는 자동으로 클래스 이름에 의해 수행되어야합니다.

+0

이 있습니까? –

+0

예, 그들은 콩으로 구성되어 있습니다 – awk

답변

1

이렇게하려면 BeanPostProcessor을 만들고이를 응용 프로그램 컨텍스트에 등록 할 수 있습니다. 사후 처리기는 적절한 명명 규칙을 사용하여 AbstractController 인스턴스를 찾고 유효성 검사기 이름을 생성하고 리플렉션을 통해 유효성 검사기 개체를 인스턴스화 한 다음 컨트롤러에 설정할 수 있습니다. 이런 식으로 뭔가가 : 그들은 의존성 주입 또는 무엇이든을 필요로하기 때문에 검증이 스프링 빈으로 등록 된 경우

public Object postProcessAfterInitialization(final Object bean, final String name) throws BeansException { 
    if (bean instanceof AbstractController) { 
     String controllerName = bean.getClass().getSimpleName(); 
     if(controllerName.endsWith("Controller")) { 
      String validatorName = controllerName.replaceFirst("Controller$", "Validator"); 
      try { 
       Class<?> validatorClass = Class.forName(validatorName); 
       Validator validator = (Validator)validatorClass.newInstance(); 
       ((AbstractController)bean).setValidator(validator); 
      } catch(Exception e) { 
       throw new FatalBeanException("Cannot instantiate validator", e); 
      } 
     } 
    } 
    return bean; 
} 

또는, 당신은 모든 컨트롤러 bean 정의를 찾는 BeanFactoryPostProcessor를 (안 BeanPostProcessor)를 만들 수 있습니다 그런 다음 유형 또는 이름별로 일치하는 유효성 검증기 bean 정의를 찾은 다음 일치하는 유효성 검증기를 각 제어기 bean의 특성 목록에 추가합니다. 나는 그것을위한 샘플 코드가 없지만 잘하면 당신은 아이디어를 얻는다.

0

당신은 구성이 같은 것을 사용 할 수 없습니다 : 유효성 검사기에 대한 콩

<bean id="abstractControllerTemplate" abstract="true"> 
    <property name="validator" ref="myFormValidator"/> 
</bean> 
... 
<bean id="someOtherConcreteController" class="com.myproj.controllers.SomeOtherConcreteController" parent="abstractControllerTemplate"> 
     <!-- other properties specific to this controller --> 
</bean> 
+0

그게 내가 자동 할당에 의해 의미가 아니에요 – awk