Padrões de design usados ​​no Spring Framework

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:


 <!--      singleton --> <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.


  • Beanfactory


    Um contêiner simples que fornece suporte básico para DI (injeção de dependência, injeção de dependência). A interface org.springframework.beans.factory.BeanFactory é usada para trabalhar com esse contêiner.


  • ApplicationContext



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.

Source: https://habr.com/ru/post/pt451516/


All Articles