Cenário 1
No aplicativo cliente (o aplicativo não é um aplicativo da web, por exemplo, pode ser um aplicativo swing)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Não há necessidade de web.xml . ApplicationContext como contêiner para obter o serviço de bean. Não há necessidade de contêiner de servidor da web. No test-client.xml , pode haver bean Simples sem controle remoto , bean com controle remoto .
Conclusão : No cenário 1 applicationContext e DispatcherServlet
não estão relacionados.
Cenário 2
Em um aplicativo de servidor (aplicativo implantado no servidor, por exemplo, Tomcat). Serviço acessado via comunicação remota do programa cliente (por exemplo, aplicativo Swing)
Definir ouvinte no web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Na inicialização do servidor, ContextLoaderListener
instancia os beans definidos em applicationContext.xml .
Supondo que você tenha definido o seguinte em applicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Os beans são instanciados a partir dos quatro arquivos de configuração test1.xml , test2.xml , test3.xml , test4.xml .
Conclusão : No cenário 2 applicationContext e DispatcherServlet
não estão relacionados.
Cenário 3
Em um aplicativo da web com o Spring MVC.
No web.xml, defina:
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Quando o Tomcat é iniciado, os beans definidos no springweb-servlet.xml são instanciados.
DispatcherServlet
se estende FrameworkServlet
. No FrameworkServlet
bean, a instanciação ocorre para a mola. No nosso caso, springweb é FrameworkServlet.
Conclusão : No cenário 3 applicationContext e DispatcherServlet
não estão relacionados.
Cenário 4
Em aplicativo da web com Spring MVC. springweb-servlet.xml para servlet e applicationContext.xml para acessar o serviço de negócios no programa do servidor ou para acessar o serviço DB em outro programa do servidor.
No web.xml, são definidos os seguintes:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Na inicialização do servidor, ContextLoaderListener
instancia os beans definidos em applicationContext.xml ; supondo que você tenha declarado aqui:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Os beans são todos instanciados dos quatro test1.xml , test2.xml , test3.xml , test4.xml . Após a conclusão da instanciação de bean definida em applicationContext.xml , os beans definidos em springweb-servlet.xml são instanciados.
Portanto, a ordem da instanciação é: a raiz (contexto do aplicativo) e, em seguida, FrameworkServlet.
Agora deve ficar claro por que eles são importantes em que cenário.