前言
在使用 Spring MVC 的过程中,遇到一个问题,在 Spring 容器 中注册的属性文件, 在 SpringMVC 容器 中无法用 @Value 标签引入!
按理说, SpringMVC 容器 应该能继承父容器中的所有Bean, 为什么不能使用父容器中引入的配置文件信息呢?
很遗憾,这个问题暂时没能找到答案,如果哪位大神能解答,请告知
但是问题还是要解决的, 我们只能换个思路解决。 如果 SpringMVC 子容器 和 Spring 父容器 如果合一了,不就不存在需要重复引入的问题吗?
那么问题来了:
SpringMVC 容器和 Spring 容器能合一吗?
先来看看一般我们使用 SpringMVC 的 web.xml 配置文件,
1 | <!DOCTYPE web-app PUBLIC |
Tomcat 在解析 web.xml 的时候先后加载 listener -> filter -> servlet
先记载 ContextLoaderListener
1 | /** |
1 | /** |
而 DispatcherServlet 继承 FrameworkServlet, FrameworkServlet 继承 HttpServletBeanHttpServletBean 继承 HttpServlet, 并且提供 init 方法
HttpServletBean 中的 init 方法调用抽象方法 initServletBean
1 |
|
FrameworkServlet 实现 initServletBean 方法
1 |
|
在这里,我们找到了 两个容器合一的方法! 果然是 Time is cheap, show me the code, 源码能告诉我们一切!
到这里, 找到了配置方式:
1 |
|
下面在回头来看看之前没有解决的问题:
为什么 SpringMVC 子容器 不能继承 Spring 父容器 引入的属性文件
待解决…