Spring实战13——Spring MVC 配置方案

Spring MVC 配置方案:

1.基于java 类配置

2.基于web.xml 配置

从哪里开始?

学源码再补充吧。。。


1.基于java 类配置

public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 返回带有@Configuration 注解的类将会用来配置ContextLoaderListener 将建的应用上下文中的bean,通常是驱动应用后端的中间层和数据层组件。
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {RootConfig.class};
    }

    /**
     * DispatcherServlet 启动的时候,会创建Spring应用上下文,加载配置文件或配置类中所声明的Bean,web组件的bean如控制器,视图解析器和处理器樱色和。
     * 返回带有@Configuration 注解的类将会用来定义DispatcherServlet 应用上下文中的bean。
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {WebConfig.class};
    }

    /**
     * getServletMappings 方法将一个或多个路径映射到DispatcherServlet 上,“/” 表示它会是应用的默认Servlet,它会处理进入应用的所有请求。
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}

2.基于web.xml 配置

	<!-- 设置web.xml 使用基于java 的配置,相当于DispatcherServletInitializer.java -->
	
	<!-- 启动java类来配置,而不是xml,注意是contextClass -->
	<context-param>
		<param-name>contextClass</param-name>
		<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
	</context-param>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>com.qhf.config.RootConfig</param-value><!-- 如果不是基于Java配置类来配置,那么这里只能配置xml文件,无配置路径则默认在clsspath -->
	</context-param>
	
	<!--
	1.ContextLoaderListener继承自ContextLoader,实现的是ServletContextListener接口。
	2.ServletContextListener接口里的函数会结合Web容器的生命周期被调用。因为ServletContextListener是ServletContext的监听者,
		如果ServletContext发生变化,会触发相应的事件,而监听器一直对事件监听,如果接收到了变化,就会做出预先设计好的相应动作。
		由于ServletContext变化而触发的监听器的响应具体包括:在服务器启动时,ServletContext被创建的时候,服务器关闭时,
		ServletContext将被销毁的时候等。
	3. ContextLoaderListener的作用就是启动Web容器时,读取在contextConfigLocation中定义的xml文件,
		自动装配ApplicationContext的配置信息,并产生WebApplicationContext对象,然后将这个对象放置在ServletContext的属性里,
		这样我们只要得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean。
		简单来说,就是上面这段配置为项目提供了spring支持,初始化了Ioc容器
	4.上面说到“监听器一直对事件监听,如果接收到了变化,就会做出预先设计好的相应动作”。而监听器的响应动作就是在服务器启动时contextInitialized
		会被调用,关闭的时候contextDestroyed被调用。这里我们关注的是WebApplicationContext如何完成创建。因此销毁方法就暂不讨论。
		链接:https://www.jianshu.com/p/523bfddf0810-->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		
		<!-- DispatcherServlet 也会配置Spring应用上下文 -->
		
		<!-- 指定java类来配置应用上下文 -->
		<init-param>
			<param-name>contextClass</param-name>
			<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
		</init-param>
		<!-- 指定java 配置类的路径 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>com.qhf.config.WebConfig</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

上面二选一来配置就行了

猜你喜欢

转载自blog.csdn.net/pigqhf/article/details/89205359