如何将MessageSource注入到扩展AbstractView的View中

时间:2009-05-11 09:33:32

标签: spring dependency-injection

我有一个扩展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作为模型属性从控制器传递给视图。有可能避免这种情况吗?

1 个答案:

答案 0 :(得分:1)

我建议创建一个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。