2008-10-03 1 views
3

Spring MVC를 사용하여 애플리케이션을 구축 중이다. 응용 프로그램의 모든 컨트롤러에 대해 모델을 변경하고 싶습니다. 특히, 응용 프로그램의 모든 페이지에 대해 표시 될 특정 추가 데이터를 모델에 삽입하려고합니다.IOC에 관심이있는 경우 Spring MVC에서 내 모델을 수정하는 가장 좋은 방법

나는 여러 가지 방법을 사용할 수 있습니다. 모든 컨트롤러 끝에 데이터를 추가하고, 추가 데이터를 추가하는 Model의 하위 클래스를 사용하고, Model을 래핑하는 ModelAndView의 하위 클래스를 사용하고, 래핑하는 VelocityView의 하위 클래스를 사용합니다. 모델을 사용하기 전에 ... 다른 옵션이있을 것입니다.

그러나 나는 "우아함"이라는 제약이 있습니다. 각 컨트롤러에 코드를 쓰고 싶지 않습니다.이 동작을 one-and-only-one 곳에 정의하고 싶습니다. 이상적으로는 IOC Bean 설정 파일에 의해 제어된다.

우아하게이를 달성하는 방법에 대한 권장 사항이 있습니까?

답변

4

측면은 좋은 방법이지만 Spring MVC를 사용하면 훨씬 쉽게 처리 할 수 ​​있습니다. 요청을 처리 할 때마다 호출 할 HandlerInterceptor을 정의 할 수 있습니다. HandlerInterceptor postHandle 메소드 (HandlerInterceptor 인터페이스를 구현하는 클래스)에서 ModelAndView에 데이터를 추가 할 수 있습니다. 설정 파일에서 인터럽트되어야하는 핸들러를 정의합니다.

1

당신은 양상을 사용할 수 있습니다. Spring은 심지어 여러분이 사용할 수있는 확장자가 AOP입니다.

간단히 말해 클래스를 컴파일 할 때나 클래스 로더가로드 할 때 클래스에 "코드화 된"코드를 한 번 정의 할 수 있습니다. 비교적 진보 된 것으로, 새로운 프로그래머가 받아들이기에 가장 직관적 인 것은 아니지만, 여러분이 언급하고있는 문제를 정확히 해결하기위한 것입니다.

0

내가 잘못했을 수도 있지만 사용자가 요구 사항을 잘못 설명했을 가능성이 있습니다.

'모든 컨트롤러에 특정 모델을 특정 모델에 추가하고 싶습니다.'

'모든보기에서 특정 데이터를 사용할 수있게하려는 경우'라고 생각됩니다.

의심되는 경우 모델에 데이터를 추가하면 모델이 오염되고 단일 책임 원칙을 위반하는 것입니다. 동일한 데이터가 여러 모델에 추가되는 경우 특히 그렇습니다. 모델을 데이터의 편리한 '운송 업체'로만 사용하는 것이 아니라 데이터가 실제로 모델과 관련이없는 곳에주의하십시오.

분명히, 나는 Spring MVC의 일을 완전히 잘 알고 있지는 않지만, 여러분이 성취하고자하는 것에 대한보다 상세한 예제가 좀 더 정보에 입각 한 토론을 허용 할 수도있다.

+0

나는 당신이 만들고있는 구별을 이해하고 있는지 잘 모르겠다. 나는 스프링의 "모델"이 "뷰에 사용 가능한 데이터"라고 생각했다. 보기에서 데이터를 사용할 수있는 다른 방법이 있다면 무엇입니까? – mcherm

+0

SimpleFormController에서 referenceData 메소드에 대해 생각하면 모델에 정보를 넣지 않고 "뷰에 정보를 제공"하는 예제입니다. 그러나 예, belugabob의 단일 책임 이의는 모델이 단일 대상이지만지도 일 때만 적용됩니다. –

+0

'모델'과 '값 스택'을 구분하지 않습니까? 모델의 데이터는 수행되는 작업과 직접 관련이 있으며 값 스택의 데이터가이를 지원하기 위해 자주 사용됩니다. 단일 국가는 종종 모델의 일부이며, 모든 국가는 종종 데이터를 지원합니다. – belugabob

관련 문제