springmvc Java配置理解

一直不懂springmvc Java配置,现在好好理解一下这个,希望路过的朋友能够指出我的错误


一直搞不懂程序的具体过程:先看看最常用的springmvc的原理图:

这里可以看到dispatchServlet的重要性。

我通过前辈搭建好的springmvc java配置的断点调试找到这些类的运行顺序。

1、最先进来AbstractAnnotationConfigDispatcherServletInitializer类的protected Class<?>[] getRootConfigClasses()的方法。

可以看到这个方法是为了创建RootApplicationContext配置使用的,如果不需要创建就返回null.

看看是如何创建根应用上下文:

这里又有一个AnnotationConfigWebApplicationContext(基于注解配置的web应用上下文),有意思的是这个类能够通过注解来将配有@Component(这里是包含@Compotent的注解,如@Controller、@Service..)的类注册到WebApplicationContext中。这里强调一下,这个配置很重要,配置不好会出现注入失败的问题,很多小白(像我一样的),看到注入失败就头疼。

这里来个小插曲:上下文理解,这里感谢一位大神的文章:http://www.it165.net/pro/html/201502/33644.html

上图:

上下文的创建由全局上下文ServletContext开始,步骤:

1、tomcat服务器(可以是其他web服务器)在扫描webapp目录下的项目(可以设定其他目录)的项目,先找到web.xml文件,在Java配置应该是找到继承某个servletContext(这里是猜测)的类,如果有的话就直接创建ServletContext,再找到全局常量将全局常量以键值对的形式存放在ServletContext中,在ServletContext初始化的时候就可以获取到常量。

2、加载Listener监听器,org.springframwork.web.context.ContextLoadListener 这个监听是为了创建 pring的WebApplicationContext(IOC容器,用来存储bean实例)。(之前一直不知道加这个有什么用,反正加了就是正确的,现在才发现是用来ioc的)。

3、由上图可知,DispatchServlet是WebApplicationContext的子上下文。在web.xml加载顺序是:全局常量->监听器->过滤器->servlet.DispatchServlet是用来请求转发作用。这里我复制一点别人的东西:

四、spring配置时:<context:exclude-filter>的使用原因,为什么在applicationContext.xml中排除controller,而在spring-mvc.xml中incloud这个controller

    既然知道了spring的启动流程,那么web容器初始化webApplicationContext时作为公共的上下文环境,只需要将service、dao等的配置信息在这里加载,而servlet自己的上下文环境信息不需要加载。故,在applicationContext.xml中将@Controller注释的组件排除在外,而在dispatcherServlet加载的配置文件中将@Controller注释的组件加载进来,方便dispatcherServlet进行控制和查找。故,配置如下:   applicationContext.mxl中:  <context:component-scan base-package='com.linkage.edumanage'>       <context:exclude-filter expression='org.springframework.stereotype.Controller'    type='annotation' />   </context:component-scan>   spring-mvc.xml中:   <context:component-scan base-package='com.brolanda.cloud'   use-default-filters='false'>        <context:include-filter expression='org.springframework.stereotype.Controller'    type='annotation' />   </context:component-scan>

我不明白,既然子上下文能用父上下文的信息,为什么还要在创建webapplicationContext时排除@Controller,需要在DispatchServlet中包含进来。猜测:大概是不想被DispatchServlet之外的Servlet看到@Controller.

现在回过头来,其实AnnotationConfigWebApplicationContext其实就是WebApplicationContext基于注解完成的。

AbstractAnnotationConfigDispatcherServletInitializer这个类不仅完成了WebApplicationContext的创建还创建了DispatchServlet.还有ServletContext,就是之前猜测最大的那个上下文。

这三个个方法,分别配置ServletContext、webApplicationContext和DispatchServlet的,当getServletConfigClasses返回null时,就共同使用WebApplicationContext的配置,因为这是父子上下文关系。

在DispatchServlet创建后就会注册一些


启动权限,安全、文件、角色

先这样吧,后面会搭建一下,验证一下自己的理论知识。


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值