IOC에 관심이있는 경우 스프링 MVC에서 내 모델을 수정하는 최선의 방법

StackOverflow https://stackoverflow.com/questions/167609

문제

Spring MVC를 사용하여 응용 프로그램을 작성하고 있습니다. 응용 프로그램의 모든 컨트롤러에 대해 내 모델을 변경하고 싶습니다. 특히, 응용 프로그램의 모든 페이지에 존재할 모델에 특정 추가 데이터를 삽입하려고합니다.

여러 가지 방법으로 수행 할 수 있습니다. 모든 컨트롤러의 끝에 데이터를 추가하고 추가 데이터를 추가하는 모델의 서브 클래스를 사용하고 모델을 랩핑하는 ModelandView의 서브 클래스를 사용하고 사용하기 전에 모델을 랩핑하는 VelocityView의 서브 클래스를 사용하십시오. 그것은 ... 다른 옵션이 있다고 확신합니다.

그러나 나는 "우아함"제약이 있습니다 : 나는 각 컨트롤러에 코드를 쓰고 싶지 않습니다. 일대일과 일대일 장소. 이상적으로는 IOC Bean 구성 파일에 의해 제어됩니다.

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

도움이 되었습니까?

해결책

측면은 좋은 접근 방식이지만 Spring MVC는 훨씬 더 쉽게 만듭니다. 핸들러 인터셉터 요청이 처리 될 때마다 전후에 호출됩니다. 핸들러 인터셉터 Posthandle 메소드 (클래스에서 핸들러 인터셉터 인터페이스를 구현하는 클래스)에서 데이터를 ModelAndView에 추가 할 수 있습니다. 구성 파일에서 인터셉트 해야하는 핸들러를 정의합니다.

다른 팁

측면을 사용하여 살펴볼 수 있습니다. 봄에도 있습니다 AOP 사용할 수있는 확장.

간단히 말하면 한 번도 코드를 정의하면 클래스를 컴파일 할 때 또는 클래스 로더로로드 될 때 클래스에 "직물"을 얻을 수 있습니다. 그것은 비교적 진보 된 것들이며 새로운 프로그래머가 픽업하기에 가장 직관적 인 것은 아니지만, 당신이 말하는 문제를 정확하게 해결하기위한 것입니다.

틀릴 수도 있지만 귀하의 요구 사항을 잘못 설명했을 수도 있습니다.

당신은 '모든 컨트롤러에 대해 특정 데이터가 내 모델에 추가되기를 원합니다'라고 말하는 것 같습니다.

나는 당신이 '모든 견해에 특정 데이터를 사용할 수 있기를 원한다'는 것을 의미한다고 생각합니다.

내 의심이 올바른 경우 모델에 데이터를 추가하면 모델을 오염시키고 단일 책임 원칙을 위반하는 것입니다. 동일한 데이터가 여러 모델에 추가 되려면 특히 그렇습니다. 모델을 데이터의 편리한 '캐리어'로 사용하는 것이 아니라 데이터가 실제로 모델과 관련이없는 경우에도 조심하십시오.

틀림없이, 나는 봄 MVC의 방식에 대해 완전히 익숙하지 않지만, 달성하려는 일에 대한 더 자세한 예는보다 정보에 근거한 토론을 허용 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top