Olá, cidadãos de Habrovsk! O longo fim de semana terminou, o que significa que é hora de compartilhar uma nova tradução útil. Hoje falaremos sobre os padrões de design usados no Spring Framework. Como você deve ter adivinhado, este material é dedicado ao início do recrutamento de um novo grupo no curso "Developer for Spring Framework" , que começa em 28 de maio. Vamos começar.

Neste artigo, revisaremos vários padrões de design amplamente usados no Spring Framework. Os padrões de design descrevem técnicas de programação no desenvolvimento de software orientado a objetos.
Aqui estão alguns padrões conhecidos usados no Spring Framework:
- Proxy (deputado)
- Singleton
- Fábrica
- Template
- Model View Controller
- Controlador Frontal
- View Helper
- Injeção de dependência e inversão de controle (IoC) (injeção de dependência e inversão de controle)
- Localizador de Serviços
- Observador-Observável
- Objeto de contexto
Proxy (deputado)
O padrão de proxy é amplamente usado no AOP e no sistema remoto .
Um bom exemplo do uso de Proxy é org.springframework.aop.framework.ProxyFactoryBean .
Esta fábrica cria proxies de AOP baseados no bean Spring.
Um proxy fornece um substituto para outro objeto para controlar o acesso a ele.
Leia mais sobre Proxy aqui .
Singleton
O padrão Singleton garante que apenas uma instância de um objeto exista na memória que fornecerá serviços.
No Spring, o escopo do bean (escopo) é singleton por padrão e o contêiner IoC cria exatamente uma instância do objeto no contêiner Spring IoC.
O contêiner Spring armazenará essa instância única no cache de bin singleton e todas as solicitações e links subseqüentes para esse bin receberão o objeto em cache.
É recomendável usar o escopo singleton para beans sem estado.
O escopo do bean pode ser definido como singleton
ou prototype
(uma nova instância é criada com cada solicitação de bean).
Exemplo de configuração no arquivo xml:
<bean id = "..." class = "..." scope = "singleton/prototype"> </bean>
Você pode ler mais sobre Singleton aqui .
Fábrica
Esse padrão permite inicializar um objeto por meio de um método estático público chamado método de fábrica.
O Spring usa o padrão Factory para criar um objeto de bean usando as duas abordagens a seguir.
Outro contêiner presente no Spring que adiciona recursos específicos da empresa. Esses recursos incluem a capacidade de ler parâmetros de arquivos de propriedades e publicar eventos de aplicativos para ouvintes de eventos.
A interface org.springframework.context.ApplicationContext
é usada para trabalhar com este contêiner.
A seguir estão as implementações mais usadas do ApplicationContext
.
FileSystemXmlApplicationContext
- no construtor, você deve especificar o caminho completo para o arquivo XML com a configuração dos beans.
ClassPathXmlApplicationContext
- você precisa colocar o arquivo XML com a configuração do bean em CLASSPATH.
XmlWebApplicationContext
- Carrega um arquivo XML com metadados de XmlWebApplicationContext
em um aplicativo Web.
Exemplos:
package com.eduonix.springframework.applicationcontext; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext( "C:/work/IOC Containers/springframework.applicationcontext/src/main/resources/bean-factory-config.xml"); HelloApplicationContext obj = (HelloApplicationContext) context.getBean("helloApplicationContext"); obj.getMsg(); } }
Para entender melhor isso, vejamos um exemplo do mundo real. Primeira configuração:
<bean id="welcomerBean" class="com.mysite.Welcomer" factory-method="createWelcomer"> <constructor-arg ref="messagesLocator"></constructor-arg> </bean> <bean id="messagesLocator" class="com.mysite.MessageLocator"> <property name="messages" value="messages_file.properties"></property> </bean>
E agora o feijão:
public class Welcomer { private String message; public Welcomer(String message) { this.message = message; } public static Welcomer createWelcomer(MessageLocator messagesLocator) { Calendar cal = Calendar.getInstance(); String msgKey = "welcome.pm"; if (cal.get(Calendar.AM_PM) == Calendar.AM) { msgKey = "welcome.am"; } return new Welcomer(messagesLocator.getMessageByKey(msgKey)); } }
Você pode ler mais sobre o Factory aqui .
Template
Esse padrão é amplamente usado para trabalhar com códigos repetidos de padrão (como fechar conexões, etc.).
Por exemplo, JdbcTemplate , JmsTemplate , JpaTemplate ( nota do tradutor: JpaTemplate está obsoleto desde a Primavera 3.1 ).
Você pode ler mais sobre o modelo aqui .
Model View Controller
A vantagem do Spring MVC é que seus controladores são POJOs, não servlets. Isso facilita o teste de controladores. É importante notar que os controladores precisam retornar apenas o nome lógico da visualização, e a escolha da visualização é deixada para o ViewResolver
. Isso facilita a reutilização de controladores para várias opções de apresentação.
Você pode ler mais sobre o Model View Controller aqui .
Controlador Frontal
O Spring fornece um DispatcherServlet para garantir que uma solicitação recebida seja enviada aos seus controladores.
O padrão Front Controller é usado para fornecer um mecanismo centralizado de processamento de solicitações, para que todas as solicitações sejam processadas por um único manipulador. Esse manipulador pode autenticar, autorizar, registrar ou rastrear a solicitação e depois passar a solicitação ao controlador apropriado.
Você pode ler mais sobre o Front Controller aqui .
View Helper
O Spring possui várias tags e macros Velocity JSP personalizadas para ajudar a separar o código da apresentação.
O View Helper separa o conteúdo estático em uma exibição, como um JSP, do processamento da lógica de negócios.
Estruturas como Spring e Struts fornecem suas próprias bibliotecas de tags para encapsular a lógica de processamento em auxiliares, em vez de colocar a lógica em uma exibição como arquivos JSP.
Você pode ler mais sobre o View Helper aqui .
Injeção de dependência e inversão de controle (IOC) (Injeção de dependência e inversão de controle)
O contêiner de IoC da Spring é responsável por criar o objeto, vinculá-lo, configurá-lo e lidar com todo o seu ciclo de vida, da criação à destruição completa.
O contêiner Spring usa Injeção de Dependência (DI) para controlar os componentes do aplicativo. Esses componentes são chamados Spring Beans.
Você pode ler mais sobre injeção de dependência aqui .
Localizador de Serviços
ServiceLocatorFactoryBean
armazena informações sobre todos os beans em um contexto. Quando o código do cliente solicita um serviço (bean) pelo nome, ele simplesmente encontra esse componente no contexto e o retorna. O código do cliente não precisa escrever o código relacionado ao Spring para encontrar o bean.
O padrão Service Locator é usado quando queremos encontrar vários serviços usando JNDI. Dado o alto custo de encontrar serviços no JNDI, o Service Locator usa o cache. Quando um serviço é solicitado pela primeira vez, o Localizador de Serviços o procura no JNDI e armazena em cache o objeto. A pesquisa adicional para o mesmo serviço através do Localizador de Serviços é realizada no cache, o que melhora significativamente o desempenho do aplicativo.
Você pode ler mais sobre o Localizador de serviços aqui .
Observador-Observável
Usado no mecanismo de eventos ApplicationContext
.
Define um relacionamento um para muitos entre objetos para que, quando o estado de um objeto for alterado, todos os seus assinantes sejam notificados e atualizados automaticamente.
Você pode ler mais sobre o Observer aqui .
Objeto de contexto
O padrão Objeto de Contexto encapsula dados do sistema em um objeto de contexto para compartilhamento por outras partes do aplicativo sem vincular o aplicativo a um protocolo específico.
ApplicationContext é a interface central em um aplicativo Spring para fornecer informações de configuração do aplicativo.
Você pode ler mais sobre o objeto de contexto aqui .
Referências
https://stackoverflow.com/questions/755563/what-design-patterns-are-used-in-spring-framework
Aqui está esse material. Aguardamos seus comentários e somos convidados para um seminário on-line gratuito , no âmbito do qual desenvolveremos um aplicativo Web clássico completo com interface do usuário, autenticação e autorização. Também estudaremos os recursos de aplicativos da Web e tentaremos resolver alguns problemas do Enterprise. O webinar será realizado hoje.