我有一个扩展AbstractExcelView的视图类

public class ExportExcelParticipantsView extends AbstractExcelView  {
...
}


我想向这个bean注入一个MessageSource。这可能吗?

我使用ResourceBundleViewResolver来解析视图(在这种情况下)

<bean id="resourceBundleViewResolver"
    class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <!-- Classpath needs to have views.properties -->
    <property name="basename" value="views" />
    <!-- This view resolver is the first one used -->
    <property name="order" value="0"/>
    <property name="defaultParentView" value="parent-view"/>
</bean>


是否可以在每次请求视图时实例化该视图类,从而比平时更难向该类注入消息源?可能吗

此刻,我将MessageSource作为模型属性从控制器传递到视图。有可能避免这种情况吗?

最佳答案

我建议创建一个ResourceBundleViewResolver的简单子类。该子类将覆盖loadView()方法,并将MessageSource注入到View对象中:

public class MyViewResolver extends ResourceBundleViewResolver {

    @Override
    protected View loadView(String viewName, Locale locale) throws Exception {
        View view = super.loadView(viewName, locale);
        if (view instanceof MessageSourceAware) {
            ((MessageSourceAware)view).setMessageSource(getApplicationContext());
        }
        return view;
    }
}


此处注入的MessageSource是appcontext自己的消息源,但是您可以在此处注入任何需要的消息源。同样,您的View类将需要实现MessageSourceAware。

10-07 13:48