SpringMVC在启动完成后执行方法
来源:互联网 发布:python 粒子群算法包 编辑:程序博客网 时间:2024/06/05 22:50
2017/5/19 9:34:22 使用markdown重新编辑,并引入新的参考链接。
2017/10/26 19:58:49 修改格式.第一个版本发布于 2017-02-08 23:23
通过实现ApplicationListener来达到在spring容器加载完毕时来作出某些自定义的操作,关于这一点想必很多人都知道了,本篇文档当然不会是这类被很多前人讲述了一遍又一遍的东西。
今天所要讲的是在SpringMVC中在上面实现的方法会被Spring回调两次,如果你是因为这个问题而找到了这篇文章,那么恭喜你达到了终点,在下面的内容里我会给出解决方案和产生这种现象的原因。
解决方案
不要在spring.xml
中注册上面那个实现了ApplicationListener<ContextRefreshedEvent>
接口的类,去在spring-mvc.xml
中进行注册即可.
原因
我们一般会有spring.xml
和spring-mvc.xml
两个文件, 针对这两个文件.
- Spring里获取bean的逻辑是:如果在自身的容器中没有找到该对象,那么就去parent container中查找(相关源码参见
AbstractBeanFactory
类中的doGetBean
方法–[(parentBeanFactory != null && !containsBeanDefinition(beanName))
]) - 而Spring中的事件通知逻辑如下: 先向自身的容器发起事件通知,如果本容器有parent container存在,则在parent container进行一次通知(相关源码参见
AbstractApplicationContext
类中的publishEvent
方法) - 所以:
- parent container(
spring.xml
作为配置文件)
由ContextLoaderListener
(org.springframework.web.context.ContextLoaderListener
)载入 - child container(
spring-mvc.xml
作为配置文件) – 由DispatcherServlet
(org.springframework.web.servlet.DispatcherServlet
)载入
- parent container(
参考链接
http://zhaoshijie.iteye.com/blog/1974682 – 只有解决办法,没有原因
Spring和SpringMVC父子容器关系初窥
阅读全文
0 0
- SpringMVC在启动完成后执行方法
- Spring/SpringMVC在启动完成后执行方法
- Spring/SpringMVC在启动完成后执行方法
- Spring/SpringMVC在启动完成后执行方法
- Tomcat启动真正完成后,执行方法
- Springmvc项目启动后定时执行某个方法
- SpringMVC启动后自动执行
- Springmvc启动后执行操作
- Tomcat启动完成后再执行一个指定的方法 - 不影响Tomcat的启动时间
- Tomcat启动完成后再执行一个指定的方法 - 不影响Tomcat的启动时间
- spring启动完成后执行特定代码
- spring项目启动完成后,自动执行一次某个特定方法。
- 在页面加载完成后执行任务
- jquery页面加载完成后执行方法
- web项目启动完成执行某个方法
- 用js实现在加载完成一个页面后自动执行一个方法
- 用js实现在加载完成一个页面后自动执行一个方法
- Tomcat启动后自动执行某方法
- 微信小程序开发工具 ubuntu linux版本
- 14. Longest Common Prefix LeetCode题解
- RocketMQ实战(一)
- HTTP和HTTPS的区别分析(详细版)
- 关于系统GC相关知识讲解
- SpringMVC在启动完成后执行方法
- 413. Arithmetic Slices
- 如何提高电路工作频率
- RocketMQ实战(二)
- 80端口被system(pid=4)占用的解决方法
- MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL
- c习题日常1
- enum与typedef enum的用法
- RocketMQ实战(三):分布式事务