Domine os principais componentes da estrutura Spring: discussão aprofundada de IOC, AOP, MVC e guia de entrevista de anotação [compartilhamento de experiência]

Índice

introdução

1. Artigos do COI da primavera

1. O que é a Primavera

2. Conceitos fundamentais

3. Arquitetura Central

4. O que é Inversão de Controle (COI)

5. Injeção de Dependência (DI)

Dois, artigos Spring AOP

1. O que é POA

2. Mecanismo de proxy Spring AOP

3. Conceitos fundamentais

4. Classificação de notificação

Três, artigos Spring MVC

1. O que é Spring MVC

2. Princípio de funcionamento

3. Componentes principais

Quatro, anotações do Spring

1. Anotações comuns do Spring

2. Anotações comuns do SpringMVC


introdução

Quando eu estava fazendo uma entrevista para um cargo de desenvolvimento Java, certa vez conheci um entrevistador que me impressionou muito. Ele me fez muitas perguntas sobre o framework Spring, mas não consegui responder algumas delas.

Fiquei um pouco frustrado na hora porque tinha me preparado muito para essa entrevista, mas ainda encontrei algumas perguntas que não esperava. Estou tentando responder à pergunta, mas não sinto que estou respondendo muito bem.

Após a entrevista, fui para casa e comecei a organizar as perguntas da entrevista e minhas respostas. Embora não tenha conseguido responder a todas as perguntas, documentei algumas das perguntas que considerei importantes e meu próprio processo de pensamento.

Através deste processo, não só aprofundei a minha compreensão do framework Spring, mas também aprendi como lidar com problemas que não conhecia. No final, compilei essas notas em um blog e compartilhei com meus amigos e desenvolvedores na Internet.

Este blog se tornou minha introdução para descrever as perguntas da entrevista de primavera que compilei. Espero que este blog ajude mais desenvolvedores a ter sucesso em entrevistas e, ao mesmo tempo, melhorar seu próprio nível de habilidade.

1. Artigos do COI da primavera

1. O que é a Primavera

A estrutura Spring é uma solução leve e em camadas para aplicativos Java orientados a aspectos. É o núcleo e a base da pilha de tecnologia Spring e foi criada para resolver a complexidade do desenvolvimento de aplicativos de nível empresarial.

> Simplificando, Spring é uma estrutura de contêiner leve de Inversão de Controle (IoC) e Orientada a Aspectos (AOP). A estrutura da camada intermediária entre SpringMVC e Mybatis, a função: conectar o anterior e o próximo, equivalente ao adesivo

2. Conceitos fundamentais

1) IOC: abreviação de Inverse of Control, traduzido como “inversão de controle”, que se refere a entregar o processo de criação de objetos ao Spring para gerenciamento.

2) AOP: Abreviação de Aspect Oriented Programming, traduzido como "Programação Orientada a Aspectos". AOP é usado para encapsular o comportamento público de múltiplas classes e encapsular a lógica que não está relacionada ao negócio, mas é comumente chamada pelos módulos de negócios, de modo a reduzir a duplicação de código no sistema e reduzir o acoplamento entre os módulos. Além disso, o AOP também resolve alguns problemas no nível do sistema, como logs, transações, permissões, etc.

3. Arquitetura Central

1) **Spring Core**: Fornece injeção de dependência e funções de gerenciamento de Bean. O componente principal é `BeanFactory`, que usa a inversão do padrão de controle para separar a configuração do aplicativo e as especificações de dependência do código real do aplicativo;

2) **Contexto Spring**: Estende o conceito de `BeanFactory`, adiciona suporte para internacionalização, propagação de eventos e verificação, etc., e também fornece muitos serviços corporativos e suporte para integração de estrutura de modelo;

3) **Spring Web**: Construído no módulo Context, fornece um contexto adequado para aplicações Web. Além disso, este módulo também fornece algum suporte orientado a serviços e também fornece integração de Spring e outros frameworks web;

4) **Spring Web MVC**: É uma implementação MVC completa para construção de aplicações Web, que acomoda um grande número de tecnologias de visualização, como JSP, Velocity, POI, etc.;

5) **Spring AOP**: Fornece suporte para programação orientada a aspectos para objetos gerenciados pelo contêiner Spring;

6) **Spring DAO**: Esta camada encapsula o acesso ao banco de dados e trata as mensagens de erro por ele lançadas, além de fornecer gerenciamento de transações baseado no módulo AOP;

7) **Spring ORM** (Mapeamento Relacional de Objetos): Spring suporta múltiplas estruturas ORM (Mybatis, Hibernate), o que simplifica as operações de banco de dados.

4. O que é Inversão de Controle (COI)

Em aplicações Java tradicionais, se uma classe deseja chamar uma propriedade ou método em outra classe, ela geralmente cria o último objeto em seu código por meio de new Object() antes de realizar a transferência da propriedade ou do método. Para conveniência de compreensão e descrição, podemos nos referir ao primeiro como “chamador” e ao segundo como “chamado”. Em outras palavras, o chamador detém o controle sobre a criação do objeto chamado.
A maior mudança trazida pela IoC não está no nível do código, mas no nível do pensamento ** transposição mestre-escravo ** mudanças. Originalmente, o chamador é a parte ativa e tomará a iniciativa de criar qualquer recurso que queira usar; mas na aplicação Spring, o contêiner IoC detém a iniciativa e o chamador se torna a parte passiva, aguardando passivamente pelo IoC. container Crie os objetos (Bean) necessários.
Este processo possui uma inversão de controle no nível de responsabilidade, e a criação de objetos originalmente implementados pelo chamador por meio de código é revertida para o contêiner IoC para obter ajuda. Portanto, chamamos esse processo de "inversão de controle" do Spring.

5. Injeção de Dependência (DI)

Na orientação a objetos, existe um relacionamento chamado “dependência” entre objetos. Simplificando, um relacionamento de dependência é que um objeto precisa usar outro objeto, ou seja, existe um atributo no objeto e o atributo é um objeto de outra classe.
A ideia central da inversão de controle é que o Spring seja responsável pela criação do objeto. Durante o processo de criação do objeto, o Spring injetará automaticamente o objeto do qual depende no objeto atual de acordo com o relacionamento de dependência, que é chamado de "injeção de dependência".

> Ou seja, uma determinada dependência é injetada dinamicamente no componente pelo contêiner Spring IOC

Dois, artigos Spring AOP

1. O que é POA

AOP (Aspect Oriented Programming) é uma ideia de programação orientada a aspectos. A programação orientada a aspectos consiste em abstrair o programa em vários aspectos, ou seja, dissecar o interior do objeto e extrair os comportamentos públicos que afetam múltiplas classes em um módulo reutilizável, reduzir a duplicação de código no sistema, reduzir o acoplamento entre módulos e melhorar a operabilidade e manutenção do código.

AOP divide um sistema de software em duas partes: preocupações centrais e preocupações transversais. O principal processo de processamento de negócios é a preocupação central, e as partes que pouco têm a ver com ele são preocupações transversais. Uma característica das preocupações transversais é que elas geralmente ocorrem em vários locais da preocupação central, mas em todos os lugares são basicamente semelhantes. Como autenticação de autorização, registro em log, processamento de transações e processamento aprimorado.

> Os benefícios trazidos pela AOP: Vamos “focar em fazer as coisas”

2. Mecanismo de proxy Spring AOP

Pring irá gerar um objeto proxy dinâmico para o objeto de destino durante o tempo de execução e implementar melhorias no objeto de destino no objeto proxy. A camada inferior do Spring AOP realiza tecelagem horizontal para o objeto de destino (Target Bean) por meio dos dois mecanismos de proxy dinâmico a seguir.

- **Proxy dinâmico JDK: **Modo de proxy dinâmico padrão Spring AOP, se o objeto de destino implementar várias interfaces, Spring usa a classe java.lang.reflect.Proxy do JDK para proxy.
- **Proxy dinâmico CGLIB: **Se o objeto de destino não implementa nenhuma interface, o Spring usa a biblioteca CGLIB para gerar uma subclasse do objeto de destino para implementar o proxy para o objeto de destino.

> Nota: Como os métodos marcados como finais não podem ser substituídos, tais métodos não podem ser proxy por meio do mecanismo de proxy dinâmico JDK ou do mecanismo de proxy dinâmico CGLIB.


3. Conceitos fundamentais

- Joinpoint (ponto de conexão)**: Refere-se aos pontos que são interceptados (pontos claros no processo de execução do programa, como chamadas de métodos, ou lançamento de exceções), no Spring, métodos de classes alvo que podem ser interceptados por proxies dinâmicos.
- **Pointcut (pointcut)**: Uma coleção de vários pontos de conexão, que define a quais pontos de conexão o conselho deve se aplicar.
- **Aconselhamento (notificação)**: Refere-se ao que fazer após interceptar o Joinpoint, ou seja, o conteúdo aprimorado do ponto de entrada.
- **Target**: Refere-se ao objeto alvo do agente.
- **Tecelagem (implantação)**: Refere-se ao processo de aplicação do código aprimorado ao destino para gerar um objeto proxy.
- **Proxy (proxy)**: refere-se ao objeto proxy gerado (o objeto criado após a aplicação da notificação ao objeto alvo).
- **Aspecto (aspecto)**: A combinação de pointcut e conselho.

4. Classificação de notificação

1) Pré-aconselhamento org.springframework.aop.MethodBeforeAdvice implementa melhorias antes da execução do método de destino.
2) A pós-notificação org.springframework.aop.AfterAdvice implementa o aprimoramento após a execução do método de destino.
3) A notificação pós-retorno org.springframework.aop.AfterReturningAdvice é aprimorada após a conclusão da execução do método de destino e um valor de retorno é retornado.
4) Notificação surround org.aopalliance.intercept.MethodInterceptor implementa melhorias antes e depois da execução do método de destino.
5) Notificação de exceção org.springframework.aop.ThrowsAdvice implementa melhorias depois que um método lança uma exceção.
6) Introduza a notificação org.springframework.aop.IntroductnInterceptor para adicionar alguns novos métodos e propriedades na classe de destino.

Três, artigos Spring MVC

1. O que é Spring MVC

Spring MVC é uma estrutura web leve baseada em Java que implementa o tipo orientado a solicitações do padrão de design MVC. Ao separar o modelo, a visualização e o controlador, a responsabilidade da camada web é dissociada e os aplicativos web complexos são divididos logicamente em seções claras.parte, simplificam o desenvolvimento, reduzem erros e facilitam a cooperação entre os desenvolvedores do grupo.

2. Princípio de funcionamento

1. Quando o usuário envia uma solicitação, o controlador front-end DispatcherServlet entra primeiro.
2. O controlador front-end (DispatcherServlet) envia a solicitação enviada pelo usuário para o HandlerMapping (HandlerMapping)
. A solicitação do usuário recebido encontra o controlador correspondente (Handler), encapsula-o em uma cadeia de execução do processador e o retorna ao controlador frontal.
4. Após o adaptador do processador receber a cadeia de execução do controlador frontal, ele encontra o controlador específico (ou seja, seu método ou lógica correspondente) chamado pelo adaptador do processador correspondente (HandlerAdapter) que executa a cadeia de execução
. (HandlerAdaptoer) chamará o controlador específico correspondente (processando a lógica de negócios)
6. Depois que o controlador for executado, ele retornará um objeto ModelAndView para o adaptador do processador
7. O adaptador do processador retornará o objeto ModelAndView retornado para o controlador frontal (Neste ponto, todo o processamento de negócios está prestes a ser concluído e a próxima etapa é responder os resultados ao usuário na forma de uma página)
8. O controlador frontal passa o objeto ModelAndView retornado para o resolvedor de visualização (ViewResolver) e o resolvedor de visualização passa de acordo com 9. ViewResolver
retorna o objeto de página encapsulado e o objeto Model para DIspatcherServlet
10. O front controller então entrega o objeto Model retornado para a View (View)
11. A View é baseada no Model passado O objeto renderiza a página novamente (preenche a visualização com dados do modelo) e retorna ao front controller.
12. O front controller responde ao navegador com o resultado concluído e então o navegador o exibe ao usuário.
 

3. Componentes principais

1) DispatcherServlet é o controlador front-end do framework SpringMVC, sua
função: processar uniformemente as solicitações e respostas enviadas pelos usuários, o que equivale a um conversor intermediário, o que reduz o agendamento e o acoplamento entre diversos componentes.

2) HandlerMapping é a função do mapeador de processador no framework SpringMVC
: encontre o Handler correspondente de acordo com a url e o método enviado pela solicitação (ou seja, haverá muitos métodos e lógica em um projeto que usa o framework SpringMVC . A função deste componente é encontrar o método e componente correspondente e devolvê-lo ao front controller)

3) Processador manipulador, observe que ele precisa ser desenvolvido pelos próprios engenheiros.
Função: Sob o controle do DispatcherServlet, o Handler processa solicitações específicas do usuário. 

4) HandlerAdapter é um adaptador de processador fornecido pela estrutura SpringMVC.Função
: De acordo com as informações do manipulador do processador encontradas pelo mapeador, execute o manipulador do processador relevante de acordo com regras específicas.

5) ViewResolver é um resolvedor de visualizações fornecido pelo framework SpringMVC.Função
: Como o nome sugere, é usado para analisar os resultados do processamento em visualizações e apresentá-los aos usuários. O analisador de visualização analisa o nome da visualização lógica em um nome de visualização física, gera um objeto de visualização de visualização e, finalmente, renderiza a visualização e responde ao usuário.

6) Visualização é a visualização fornecida pelo desenvolvedor.Função
: renderizar a página de acordo com os requisitos do objeto modelo, e então o front controller responde ao usuário.

Quatro, anotações do Spring

1. Anotações comuns do Spring

1) @Repository declara a classe DAO como um Bean
2) @Service é usado para modificar os componentes da camada de serviço
3) @Controller geralmente atua na camada de controle e será usado no Spring MVC
4) @Component é um conceito generalizado isso significa apenas que um componente (Bean) no Spring pode atuar em qualquer nível
5) @Scope é um escopo no contêiner springIoc, que possui os seguintes escopos no contêiner Spring IoC: singleton (caso único), protótipo (casos múltiplos), Escopo da Web (solicitação, sessão, sessão global), escopo personalizado.
6) @Autowired irá corresponder automaticamente ao bean no contexto Spring (o padrão é correspondência de tipo) e injetá-lo automaticamente no local correspondente
7) @Resource:
(1) Não há conteúdo por trás de @Resource, e o atributo name é usado para corresponder ao bean por padrão. Se você não conseguir encontrá-lo, combine-o por tipo.
(2) Se você especificar nome ou tipo, combine os beans de acordo com o tipo especificado.
(3) Se você especificar nome e tipo, combine beans de acordo com o nome e tipo especificados. Qualquer incompatibilidade reportará um erro na anotação @Transactional usada na programação de gerenciamento de transações declarativas

2. Anotações comuns do SpringMVC

1) @RequestMapping: Uma anotação é uma anotação usada para processar o mapeamento de endereço de solicitação, que pode ser usada para mapear uma solicitação ou método e pode ser usada em uma classe ou método.
(1) Usado no método, indicando que adicionar o endereço na anotação do método sob o caminho pai da classe acessará o método
(2) Usado na classe, indicando que todos os métodos da classe que respondem às solicitações usam este endereço como o caminho pai.

2) @RequestParam: usado principalmente para mapear os dados na área de parâmetros de solicitação para os parâmetros do método da camada de controle

3) @ModelAttribute:
(1) Vincular parâmetros de solicitação ao objeto de comando: quando colocado no parâmetro de entrada do método de processamento de função, é usado para vincular vários parâmetros de solicitação a um objeto de comando, simplificando assim o processo de vinculação e exposto automaticamente como dados do modelo são usados ​​​​para exibição da página de visualização;
(2) Expor objetos de referência de formulário como dados do modelo: quando colocados no método geral do processador (método de processamento não funcional), é o objeto de referência de formulário a ser exibido para o formulário , como registro Quando você precisa selecionar a cidade, etc., e antes de executar o método de processamento de função (@RequestMapping método de anotação), ele é automaticamente adicionado ao objeto do modelo para uso ao exibir a página de visualização; (3) Exponha o valor de retorno do método @RequestMapping para os
dados do modelo: quando colocado no valor de retorno do método de processamento de função, é para expor o valor de retorno do método de processamento de função como dados do modelo, que são usados ​​​​para exibir a página de visualização.

4) @SessionAttributes: Por padrão, quando o escopo dos atributos no ModelMap estiver no nível da solicitação, ou seja, quando a solicitação terminar, os atributos no ModelMap serão destruídos. Se você deseja compartilhar os atributos no ModelMap em múltiplas solicitações, você deve transferir os atributos para a sessão para que os atributos do ModelMap sejam acessados ​​através de solicitações; o spring nos permite especificar seletivamente quais atributos no ModelMap precisam ser
transferidos para sessão, para que os atributos do ModelMap correspondentes à próxima solicitação ainda possam ser acessados.
SpringMVC nos fornece essa anotação para realizar o cenário acima: `@SessionAttributes`: Compartilhe o valor do atributo de ModelMap na sessão.

5) @RequestBody: é usado principalmente para receber os dados na string json passada do front-end para o back-end (ou seja, os dados no corpo da solicitação); o método GET não
possui corpo da solicitação, portanto, ao usar @ RequestBody para receber dados, **O front end não pode ser usado. Envie dados no modo GET, mas envie-os no modo POST**. No mesmo método de recebimento do backend, @RequestBody e @RequestParam() podem ser usados ​​ao mesmo tempo, @RequestBody pode ter no máximo um e @RequestParam() pode ter vários.
Resumindo:
(1) Uma solicitação: existe apenas um @RequestBody;
(2) Uma solicitação: pode haver vários @RequestParam.

6) @RequestHeader: Use a anotação @RequestHeader para obter as informações do cabeçalho da solicitação especificada. Se quiser obter todas as informações do cabeçalho da solicitação, você pode usar qualquer um dos três mapas, Map<String, String>, MultiValueMap<String, String>, HttpHeaders, para encapsular o nome e o valor de todos os cabeçalhos da solicitação.

7) @PathVariable: Esta anotação solicita a ligação da parte variável do modelo no URI ao parâmetro do método de processamento da função do processador.
Ou seja, ao usar o mapeamento de estilo de modelo URI @RequestMapping, ou seja, someUrl/{paramId}, o paramId neste momento pode ser vinculado ao valor passado por ele para o parâmetro do método através da anotação @Pathvariable. Conte.

8) @CookieValue: A anotação mapeia principalmente os dados do cookie solicitados para os parâmetros do método de processamento da função.

Supongo que te gusta

Origin blog.csdn.net/weixin_74318097/article/details/132481491
Recomendado
Clasificación