Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java web应用程序与#x27;s上下文参数和servlet';什么是初始参数?_Java_Spring_Spring Mvc - Fatal编程技术网

Java web应用程序与#x27;s上下文参数和servlet';什么是初始参数?

Java web应用程序与#x27;s上下文参数和servlet';什么是初始参数?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在使用SpringMVC。在控制器类中,我想使用@Value注释来注入来自属性文件的值: @Value("${upload.dir}") private String uploadDir; 所以我需要在某处放置一个属性占位符 web.xml是典型的: <servlet> <servlet-name>mvc-dispatcher</servlet-name> <init-param> <param-name

我正在使用SpringMVC。在控制器类中,我想使用@Value注释来注入来自属性文件的值:

@Value("${upload.dir}")
private String uploadDir;
所以我需要在某处放置一个属性占位符

web.xml是典型的:

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/mvc-dispatcher-servlet.xml</param-value>
    </init-param>
    ...
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/business-context.xml</param-value>
</context-param>

mvc调度器
上下文配置位置
类路径:spring/mvc-dispatcher-servlet.xml
...
上下文配置位置
类路径:spring/business-context.xml
首先,我将占位符放在business-context.xml中。它不起作用:“无法自动关联字段”

然后我把它放在mvc-dispatcher-servlet.xml中,它就可以工作了

所以我对这两种情况感到困惑,它们是相同的还是不同的?因为我在business-content.xml中定义的bean可以自动连接,但是@Value不起作用

我不想把占位符放在两个xml文件中,因为我有一个很长的“location”属性。另外,business-context.xml将被某些作业使用,因此不能忽略


有没有办法使business-context.xml中定义的占位符在mvc-dispatcher-servlet.xml中也可见?

A
BeanFactoryPostProcessor
属性占位符仅对其定义的应用程序上下文起作用(并且可见)。这是故意的。因此,不,您不能使父对象的属性占位符对子上下文可见(当然,您可以使用一些讨厌的黑客)

作为解决方案,您可以在business-context.xml中执行以下操作

<util:properties id="applicationProperties" location="path-to-your-very-long-location" />
<context:property-placeholder properties-ref="applicationProperties" />

这在您的mvc-dispatcher-servlet.xml中

<context:property-placeholder properties-ref="applicationProperties" />

在两个xml上下文中定义相同的
,只需引用已加载的属性即可。增加的优点是属性只加载一次