如何在运行时更改以下bean属性?

时间:2014-06-22 05:03:12

标签: java spring dependency-injection

我有以下Spring xml文件,用于为不同的文件格式生成不同的视图。我有两个属性,一个是 url datasource 。我希望在运行时更改 url ,即我想使用不同的jrxml文件而不是一个静态文件。

    <bean id="pdfReport"
        class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
        p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" />

    <bean id="xlsReport"
        class="org.springframework.web.servlet.view.jasperreports.JasperReportsXlsView"
        p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" />

    <bean id="htmlReport"
        class="org.springframework.web.servlet.view.jasperreports.JasperReportsHtmlView"
        p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" />

    <bean id="csvReport"
        class="org.springframework.web.servlet.view.jasperreports.JasperReportsCsvView"
        p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" />

1 个答案:

答案 0 :(得分:3)

从您的上下文中检索bean

ApplicationContext context = ...;
JasperReportsCsvView view = (JasperReportsCsvView) context.getBean("csvReport");

并使用其setter更改属性

view.setUrl(someNewValue);

为每个bean做同样的事情。如果您的bean共享一个公共超类型,您可以使用ApplicationContext#getBeansOfType(Class)一次性Map检索所有这些类型。然后迭代条目并更改视图的属性。