Quais padrões de design são usados no framework Spring?
Respostas:
Existem muitos padrões de design diferentes usados, mas existem alguns óbvios:
Singleton - os beans definidos nos arquivos de configuração do spring são singletons por padrão.
Método de modelo - usado extensivamente para lidar com código repetido clichê (como fechar conexões de forma limpa, etc.). Por exemplo , JdbcTemplate , JmsTemplate , JpaTemplate .
Atualize os seguintes comentários: Para MVC, você pode querer ler a Referência MVC
Alguns padrões óbvios em uso em MVC:
Controlador de visualização do modelo :-). A vantagem do Spring MVC é que seus controladores são POJOs ao invés de servlets. Isso facilita o teste dos controladores. Uma coisa a se notar é que o controlador só precisa retornar um nome de visualização lógico, e a seleção da visualização é deixada para um ViewResolver separado . Isso torna mais fácil reutilizar controladores para diferentes tecnologias de visualização.
Controlador frontal . Spring fornece DispatcherServlet para garantir que uma solicitação de entrada seja despachada para seus controladores.
View Helper - Spring possui uma série de tags JSP customizadas e macros de velocidade, para ajudar a separar o código da apresentação nas visualizações.
Foo
e você recupera a instância de Foo
por contexto, você obterá duas referências de objeto diferentes. Em vez disso, o padrão de design aplicado aqui é o peso mosca
A coisa do DI na verdade é algum tipo de padrão de estratégia. Sempre que você quiser que alguma lógica / implementação possa ser trocada, você normalmente encontrará uma interface e um método setter apropriado na classe do host para conectar sua implementação customizada dessa interface.
Spring é uma coleção de padrões de API de melhores práticas, você pode escrever uma lista de compras deles tão longa quanto seu braço. A maneira como a API é projetada o incentiva (mas não o força) a seguir esses padrões e, na maioria das vezes, você os segue sem saber que está fazendo isso.
Padrão de localizador de serviço - ServiceLocatorFactoryBean mantém informações de todos os beans no contexto. Quando o código do cliente pede um serviço (bean) usando name, ele simplesmente localiza esse bean no contexto e o retorna. O código do cliente não precisa escrever código relacionado ao spring para localizar um bean.
Padrão de Factory Method: BeanFactory para criar instância de um objeto Singleton: o tipo de instância pode ser singleton para um contexto Protótipo: o tipo de instância pode ser protótipo. Padrão de construtor: você também pode definir um método em uma classe que será responsável por criar uma instância complexa.
O Spring container gera objetos de bean dependendo do escopo do bean (singleton, protótipo etc.). Então, isso parece implementar o padrão Abstract Factory . Na implementação interna do Spring, tenho certeza de que cada escopo deve ser vinculado a uma classe de tipo de fábrica específica.