将@value与PropertyPlaceholderConfigurer一起使用

时间:2012-01-31 16:29:00

标签: spring spring-annotations

我有属性文件 report.properties (\ WEB-INF \ classes \ properties \ report.properties),带有条目:

reportTemplate = reports/report5.jrxml

applicationContext-reports.xml (\ WEB-INF \ config \ applicationContext-reports.xml),条目为:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:properties/report.properties"/>
</bean>

的web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/config/applicationContext-reports.xml
    </param-value>
</context-param>

在我的控制器中我有:

private @Value("${reportTemplate}") String reportTemplatePath;

但是,当我打印它以检查其值为:

System.out.println("reportTemplatePath="+reportTemplatePath);

而不是输出:reports/report5.jrxml(取自属性文件),而不是reportTemplatePath=${reportTemplate}

修改:为了清晰起见,在此处复制了OP评论,并显示了System.out.println的位置。

@Controller
public class myController {
    private @Value("${reportTemplate}") String reportTemplatePath;
    // other field declarations... 

    @RequestMapping(value="report.htm", method=RequestMethod.GET) public String showReport() throws JRException{
        ...
        System.out.println("reportTemplatePath="+reportTemplatePath);
        ...
        return "report";
    }
}

1 个答案:

答案 0 :(得分:7)

我猜applicationContext-reports.xml属于根应用程序上下文,而控制器是在DispatcherServlet的上下文中声明的。如果是,请注意PropertyPlaceholderConfigurer是基于每个上下文配置的,因此您还需要在...-servlet.xml中声明它。