我有一个扩展 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/