Compreensão profunda da primavera cara a cara

1 Você entende o fluxo de processamento do SpringMVC?

  • O usuário envia uma solicitação para o controlador frontal DispatcherServlet.
  • O DispatcherServlet localiza o processador correspondente por meio do mapeador de processador HandlerMapping.
  • O DispatcherServlet envia a solicitação ao controlador do processador correspondente.
  • O controlador retorna ao ModelAndView após o processamento da solicitação.
  • DispatcherServlet passa ModelAndView para ViewResolver para resolução.
  • Por fim, o DispatcherServlet responderá às solicitações do usuário e exibirá as exibições correspondentes.

1.1 1. A pilha de métodos nativos de jvm é privada para cada thread?

Sim, cada encadeamento tem sua própria pilha privada de máquina virtual Java (pilha Java) e pilha de método local (pilha de método nativo). Quando um thread é criado, sua pilha também é criada. O Java Stack é utilizado principalmente para armazenar o frame do método Java (Frame), enquanto o Native Method Stack é utilizado para suportar a execução do método Native.

  1. Qual é a relação entre SpringMVC e Tomcat?

    • Tomcat : Tomcat é um contêiner da web, ou um contêiner Servlet, usado para fornecer um ambiente no qual aplicativos da web Java (principalmente Servlets, JSPs, filtros, etc.) podem executar e atender a solicitações HTTP.

    • SpringMVC : SpringMVC é um módulo da estrutura Spring que implementa o padrão de design MVC (Model-View-Controller) para a construção de aplicativos da web. Especificamente, é uma estrutura de controlador frontal (Front Controller) para aplicativos da Web que pode manipular solicitações HTTP e decidir qual controlador (processador) manipula qual solicitação com base na configuração do desenvolvedor.

    relacionamento :

    • Quando uma solicitação HTTP chega ao Tomcat, o Tomcat decidirá qual Servlet processará a solicitação de acordo com a configuração. Se o aplicativo da Web for baseado em SpringMVC, a solicitação geralmente é enviada para DispatcherServlet(Servlet principal do SpringMVC).
    • DispatcherServletResponsável por processar a requisição, e decidir para qual método do Controller distribuir a requisição para processamento de acordo com a definição do desenvolvedor na configuração do Spring.
    • Portanto, em termos simples, o Tomcat fornece um ambiente de execução para o SpringMVC, e o SpringMVC gerencia e processa as solicitações da Web nesse ambiente.

1.2 Qual é a relação entre o modelo de threading usado no tomcat e o springMVC aqui?

  • Modelo de encadeamento do Tomcat: o Tomcat usa um conjunto de encadeamentos para processar solicitações HTTP recebidas. Sempre que chega uma nova solicitação, o Tomcat pega um thread do pool de threads para processar a solicitação. Isso significa que solicitações simultâneas serão processadas por threads simultâneos.

  • Relacionamento: quando um thread no Tomcat processa uma solicitação para o SpringMVC, o thread entra no DispatcherServlet do SpringMVC e, em seguida, é roteado para o controlador correspondente. Isso significa que os métodos Controller do SpringMVC geralmente são executados no thread de processamento de solicitações do Tomcat. Portanto, o modelo de execução e o desempenho do SpringMVC são amplamente influenciados pelo modelo de encadeamento do Tomcat.

2 Quais são as principais diferenças entre as versões 1.7 e 1.8 do Java?

  • Expressões lambda: o Java 8 apresenta as expressões lambda, adicionando uma maneira totalmente nova de programação ao Java.
  • API de fluxo: o Java 8 adiciona uma nova API de fluxo para oferecer suporte ao processamento de dados.
    Métodos padrão e estáticos em interfaces: No Java 8, as interfaces podem ter implementações de método usando a palavra-chave default.
  • Nova API de data e hora: o Java 8 apresenta uma API de data e hora completamente redesenhada.
    Classe opcional: o Java 8 introduziu a classe Optional, que é um objeto contêiner que pode conter valores nulos.
  • Mecanismo Nashorn JavaScript: No Java 8, a JVM ganhou um novo mecanismo Nashorn JavaScript, tornando possível executar JavaScript na JVM.
    Novo coletor: o Java 8 introduz muitos novos métodos na classe Collectors para oferecer suporte a operações de agregação avançadas.
  • Os recursos do Java 7: como Switch-String, try-with-resources, operador de diamante, nova API de arquivo etc., ainda existem no Java 8, mas os novos recursos do Java 8 em comparação com o Java 7 estão listados acima.

3 Você entende o princípio do Spring AOP?

O Spring AOP (Aspect-Oriented Programming) usa o modo proxy, implementado principalmente de duas maneiras:

  • Proxy dinâmico do JDK: o Spring AOP usa o proxy dinâmico do JDK para criar um proxy quando a classe de destino implementa uma interface. Isso envolve a classe java.lang.reflect.Proxy e a interface java.lang.reflect.InvocationHandler.

  • Proxies CGLIB: O Spring AOP usa a biblioteca CGLIB para criar proxies baseados em classe quando a classe de destino não implementa uma interface.

Em ambos os casos, o proxy criado intercepta chamadas para os métodos do objeto de destino, permitindo-nos injetar lógica personalizada como registro, gerenciamento de transações, verificações de segurança, etc. antes, depois de chamar o método ou quando uma exceção é levantada.

4 Qual problema o Spring AOP deseja principalmente resolver?

O Spring AOP visa fornecer recursos de programação orientados a aspectos para resolver os seguintes problemas:

  • Preocupações transversais: funções comuns (como registro, gerenciamento de transações, verificações de segurança, etc.) que existem em vários módulos ou funções são chamadas de preocupações transversais. Essas preocupações transversais são frequentemente misturadas com a lógica de negócios, resultando em duplicação de código e dificuldade em manter o .

  • Modularidade: AOP nos permite tornar essas preocupações transversais modulares e independentes da lógica de negócios. Dessa forma, podemos gerenciar centralmente essas preocupações e modificar ou adicionar funcionalidades facilmente quando necessário.

  • O código é claro e fácil de manter: Ao separar a lógica de negócios das preocupações transversais, podemos tornar o código de negócios mais claro, conciso e sustentável.

Resumindo, o objetivo do Spring AOP é fornecer um mecanismo que permita aos desenvolvedores separar funções comuns e repetitivas (como log, segurança, transações etc.) da lógica de negócios, melhorando assim a capacidade de manutenção, legibilidade e reutilização do código.

5 Spring bean e ciclo de vida do aplicativo?

5.1 O ciclo de vida do Spring Bean:

  1. As definições de bean são lidas de arquivos de configuração XML e instanciadas.
    O Spring executa a injeção de dependência nas propriedades do bean.
  2. Se o Bean implementa a interface BeanNameAware, o Spring passa o ID do bean para o método setBeanName().
  3. Se o Bean implementar a interface BeanFactoryAware, o Spring chamará o método setBeanFactory() e passará no BeanFactory.
  4. Se o Bean implementar a interface ApplicationContextAware, o método setApplicationContext() será chamado, passando o ApplicationContext atual.
  5. Se o Bean implementar a interface BeanPostProcessor, o método postProcessBeforeInitialization() será chamado.
  6. Se o Bean implementar a interface InitializingBean, o método afterPropertiesSet() será chamado.
  7. Se o bean declarar um método de inicialização usando o método init no arquivo de configuração, esse método será chamado.
  8. Se o Bean implementar a interface BeanPostProcessor, o método postProcessAfterInitialization() será chamado.
  9. O bean agora está pronto para ser usado pelo aplicativo.
  10. Quando o container é fechado, se o Bean implementa a interface DisposableBean, o método destroy() será chamado.
  11. Se o bean declarar um método de destruição usando destroy-method no arquivo de configuração, esse método será chamado.

5.2 O ciclo de vida do aplicativo Spring:

  1. ApplicationContext é inicializado/atualizado.
  2. Instanciação de bean, configuração e invocação de vários métodos de inicialização.
  3. ApplicationContext publica o evento ContextRefreshedEvent.
  4. Quando o aplicativo está em execução, o ApplicationContext e os Beans nele podem ser usados.
  5. Os beans podem ser destruídos quando o ApplicationContext é fechado.
  6. ApplicationContext publica o evento ContextClosedEvent.

6 MyBatis é uma estrutura Java ORM popular que usa uma variedade de padrões de design, incluindo:

  • Padrão de fábrica: Use SqlSessionFactory para criar SqlSession.
  • Padrão de construtor (Builder Pattern): como XMLConfigBuilder e XMLMapperBuilder, usado para construir e analisar arquivos de configuração.
  • Template Pattern: Este padrão é utilizado em alguns métodos de processamento interno de operações de banco de dados do MyBatis, define as etapas da operação, mas posterga a execução de algumas etapas.
  • Padrão Proxy: MyBatis usa o proxy dinâmico JDK para criar um objeto proxy para a interface do Mapper, para que os desenvolvedores possam chamar diretamente as operações do banco de dados por meio da interface sem escrever uma implementação.
  • Padrão Singleton: Assim como a Configuração, geralmente há apenas uma instância de cada bean em toda a sessão MyBatis.
  • Padrão Composto: No arquivo de configuração, pode haver várias combinações.

7 Quais recursos o volátil alcança e como?

8 A configuração automática do Spring Boot é baseada nos seguintes conceitos básicos:

  • @EnableAutoConfiguration: Esta é a anotação principal da configuração automática do Spring Boot. Quando você adiciona a anotação @SpringBootApplication à classe principal, ela realmente inclui @EnableAutoConfiguration. Essa anotação informa ao Spring Boot para configurar automaticamente o projeto com base nas dependências jar adicionadas.

  • O arquivo spring.factories: O arquivo spring.factories desempenha um papel central no processo de configuração automática do Spring Boot. O Spring Boot verifica o caminho de classe do projeto na inicialização, localiza todos os pacotes jar contendo arquivos spring.factories, depois lê o conteúdo dos arquivos, localiza e carrega todas as classes de configuração automática.

  • Anotações condicionais: como @ConditionalOnClass, @ConditionalOnBean, @ConditionalOnMissingBean, @ConditionalOnProperty, etc. Essas anotações garantem que determinadas configurações ou beans sejam criados somente se determinadas condições forem atendidas. Por exemplo, se houver uma determinada classe no caminho de classe, ou se um determinado bean estiver/não estiver presente no contexto do Spring, ou se uma propriedade de configuração tiver um valor específico, etc.

O processo geral é brevemente o seguinte:

  • O Spring Boot varre o caminho de classe na inicialização e localiza o pacote jar contendo o arquivo spring.factories.
  • Todas as classes de configuração automática são obtidas do arquivo spring.factories.
  • Com base nas anotações condicionais, decida quais classes de autoconfiguração serão carregadas ou quais beans serão criados.
  • A configuração padrão também pode ser ajustada por meio dos arquivos application.properties ou application.yml, se necessário.

Acho que você gosta

Origin blog.csdn.net/yxg520s/article/details/132211387
Recomendado
Clasificación