Qual a melhor forma de modificar meu modelo no mvc de primavera se eu me preocupar com o COI

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

Pergunta

Estou construindo um aplicativo usando o Spring MVC. Quero fazer certas alterações no meu modelo para todos os controladores do aplicativo. Em particular, quero inserir certos dados extras no modelo que estarão presentes para todas as páginas do aplicativo.

Eu poderia fazer isso de várias maneiras: basta adicionar os dados no final de todos os controladores, usar uma subclasse de modelo que adiciona meus dados extras, use uma subclasse do ModelAndView que envolve meu modelo, use uma subclasse de VelocityView que envolve o modelo antes de usar ... Tenho certeza de que existem outras opções.

Mas eu tenho uma restrição de "elegância": não quero escrever código em todos os controladores, quero esse comportamento definido em um e somente um Lugar, colocar. Idealmente, seria controlado pelo meu arquivo de configuração do IOC Bean.

Alguém tem uma recomendação de como conseguir isso elegantemente?

Foi útil?

Solução

Aspectos são uma boa abordagem, mas o MVC da primavera torna ainda mais fácil - você pode definir um HandlerInterceptor Isso será chamado antes ou depois de cada vez que uma solicitação for tratada. No método Postandle do HandlerInterceptor (em sua classe que implementa a interface HandlerInterceptor), você pode adicionar seus dados ao ModelAndView. Você define quais manipuladores devem ser interceptados no seu arquivo de configuração.

Outras dicas

Você pode dar uma olhada no uso de aspectos. Primavera até tem um AOP extensão que você poderia usar.

Em resumo, um aspecto permitiria que você definisse o código uma vez que isso entraria em suas classes quando você compilar as classes ou quando elas são carregadas pelo carregador de classe. É uma coisa relativamente avançada e não é a coisa mais intuitiva para os novos programadores adquirirem, mas pretende resolver exatamente o problema que você está se referindo.

Posso estar errado, mas suspeito que você tenha descrito seus requisitos incorretamente.

Você parece estar dizendo 'quero que certos dados sejam adicionados ao meu modelo, para todos os controladores'.

Eu suspeito que você quer dizer 'quero que certos dados estejam disponíveis para todas as visualizações'.

Se minhas suspeitas estiverem corretas, adicionar os dados ao seu modelo está poluindo seu modelo e violando o princípio de responsabilidade única. Isso é especialmente verdadeiro para que os mesmos dados sejam adicionados a vários modelos. Tenha cuidado para que você não esteja apenas usando seu modelo como uma 'transportadora' conveniente dos dados - onde os dados realmente não têm nada a ver com o modelo.

É certo que não estou completamente familiarizado com a maneira do MVC da primavera de fazer as coisas, mas um exemplo mais detalhado do que você está tentando alcançar pode permitir uma discussão mais informada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top