1. O que a primavera pode fazer?
O principal objetivo da primavera é facilitar o uso do J2EE e promover bons hábitos de programação.
O núcleo de design da mola de contêiner de controle invertido é o pacote org.springframework.beans, projetado para trabalhar com os javabeus. Este pacote geralmente não é usado diretamente pelos usuários, mas serve de base para mais serviços funcionais. A próxima abstração de nível superior é a "fábrica de feijão". A Spring Bean Factory é uma fábrica normal que permite que os objetos sejam recuperados pelo nome e gerencie os relacionamentos entre objetos. As fábricas de feijão suportam dois padrões de objetos :. Singleton: Nesse padrão, há uma instância de objeto compartilhado com um nome específico, que é recuperado ao olhar para cima. Este é o padrão e é mais comumente usado. É um padrão ideal para objetos apátridas. .Protótipo: Nesse modo, um objeto separado será criado sempre que a busca for obtida.
2. Método de carregamento e implementação de início da primavera
O primeiro: implementar operações antes de inicializar e destruir Beans anotando os métodos @PostConstruct e @predestroy
O segundo tipo: Defina métodos init-method e Destory-Method em XML
O terceiro tipo: implemente interfaces InitializingBean e DisposableBean através de feijões
O quarto tipo: escreva uma classe para implementar a interface BeanPostProcessor. Esta interface possui dois métodos.
(1): Pós -processamento Método da ForeInitialização, ligue para este método antes do feijão definido na primavera ser inicializado antes do feijão definido na primavera
(2): Método pós -processadosfterinitialização, ligue para este método ou implementação após a inicialização do feijão definido na primavera.
InstantatioCeareBeanPostProcessor é um subinterface do BeanPostProcessor
Executar após o carregamento do recipiente de mola
Do ouvinte da primavera como a entrada.
org.springframework.web.context.ContextLoaderListener
Encontre o método para inicializar a mola
/*** Inicialize o contexto do aplicativo da Web root. */ @Override public void contextinitialized (Evento ServletContextevent) {initwebApplicationContext (event.getServletContext ()); }Digite o método initwebApplicationContext
if (this.Context == NULL) {this.Context = createWeBapplicationContext (servletContext); } if (this.Context Instância do configurablewebApplicationContext) {ConfigurablewebApplicationContext cwac = (configurablewebApplicationContext) this.Context; if (! cwac.isactive ()) {// O contexto ainda não foi atualizado -> forneça serviços como // definir o contexto pai, definir o ID do contexto do aplicativo, etc se (cwac.getParent () == null) {// A instância de contexto foi injetada sem um pai explícito -> // determinar pai para contexto de aplicação da web root, se não. ApplicationContext Parent = loadParentContext (ServletContext); cwac.setParent (pai); } configureandRefreshWebApplicationContext (cwac, servletContext); }} ApplicationListener
1. Escreva uma classe de ouvinte que implemente o ApplicationListener.
import org.springframework.context.applicationListener; importe org.springframework.context.event.contextrefreshedEvent; importar org.springframework.tereotype.Service; @ServicePublic Classe startUplineMPlemments @STeStrice OnApplicationEvent (evento contextrefreshEDevent) {if (event.getApplicationContext (). getParent () == null) // O contexto do aplicativo root não tem pai, ele é o chefe. {// O código lógico que precisa ser executado será executado após a inicialização do contêiner da mola. System.out.println ("/n/n/n/n/n/n ______________/n/n/n carregado/n/n _________/n/n"); } // ou o seguinte método if (event.getApplicationContext (). getDisplayName (). Equals ("root webApplicationContext")) {System.out.println ("/n/n/n ________/n/n/n carregado uma vez/n/n/n _________/n/n"); }}}2. Defina o pacote de varredura de serviço no arquivo de configuração (ApplicationContext-Servlet.xml)
<!-Registre-se @Controller, @Service-> <Contexto: Componente-Scan Base-Package = "com.test.controller" use-default-filters = "false"> <Contexto: incluir-filter type = "Annotation" Expression = "Org.springframe.TerEotype.Controlller" /> <Contextion " Expression = "org.springframework.stereotype.service" /> < /context: component-Scan>
3. Implante o projeto de inicialização e imprima "Carregar" após a primavera for carregada
ApplicationOntext e WebApplicationOntext após o uso do MVC chamará o método acima duas vezes. Como distinguir entre esses dois recipientes?
Mas neste momento, haverá um problema. No projeto da web (SpringMVC), haverá dois contêineres no sistema, um é o contexto de aplicativo root e o outro é o nosso próprio ProjectName-ServletContext (como subcontainer do contexto de aplicativo root).
Nesse caso, o método OnApplicationEvent será executado duas vezes. Para evitar os problemas mencionados acima, só podemos chamar o código lógico após a inicialização do contexto do ROOTAPLICACION. Se a inicialização de outros contêineres for concluída, nenhum processamento será feito. Após a conclusão do código modificado, o código será modificado.
do seguinte modo:
@Override public void onApplicationEvent (contextrefreshedEvent Event) {if (event.getApplicationContext (). GetParent () == null) {// contexto do aplicativo ROOT Não há pai, é o chefe. // O código lógico que precisa ser executado será executado quando o contêiner da mola for inicializado. }}A ordem de inicialização é:
Construtor> @PostConstruct> InitializingBean> init-method
Resumir
O exposto acima é sobre a análise inicial da estrutura da primavera neste artigo, espero que seja útil para todos. Se você tiver alguma dúvida, poderá deixar uma mensagem a qualquer momento e o editor responderá a todos a tempo. Obrigado amigos pelo seu apoio para este site!