spring - 如何将 MessageSource 注入(inject)到扩展 AbstractView 的 View 中

标签 spring dependency-injection

我有一个扩展 AbstractExcelView 的 View 类

public class ExportExcelParticipantsView extends AbstractExcelView  {
...
}

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

我使用 ResourceBundleViewResolver 来解析 View (在本例中)

<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> 

是否每次请求 View 时都会实例化该 View 类,从而向该类注入(inject)消息源比平常更困难?有可能吗?

目前,我将 MessageSource 作为模型属性从 Controller 传递到 View 。有可能避免这种情况吗?

最佳答案

我建议创建一个 ResourceBundleViewResolver 的简单子(monad)类。该子类将重写 loadView() 方法并将 MessageSource 注入(inject)到 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;
    }
}

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

关于spring - 如何将 MessageSource 注入(inject)到扩展 AbstractView 的 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/847372/

相关文章:

c# - 这是 "Bastard injection anti-pattern"的一个很好的例子吗?

java - JPA删除在后台执行更新查询

java - 忽略带有 Scatter-Gather 模式的 Spring Integration 的一个错误

java - Spring登录表单不起作用

json - Spring Rest api 过滤响应中的字段

asp.net-mvc-4 - autofac - 依赖注入(inject)到 IHttpModule

java - 是否可以在公共(public)/共享上下文中使用 Spring 库?

c# - Ninject 动态构造函数参数

winforms - 在用户控件中使用构造函数注入(inject)的方法?

Spring 未将 bean 注入(inject)线程