Need some explanation about BeanNameViewResolver

Indeed the documentation is not fantastic.

The view resolver in spring mvc is a bean which translates from view names to views.

A view name is s simple string. It is returned by the controller's handleRequest() method within the ModelAndView object.

ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
    ....
    return ModelAndView("thisIsTheViewName", ...);
}

This view name is resolved to an actual view class by the view resolver.

The BeanNameViewResolver has an easy job: It looks for a view bean in the applicationContext which has this view name as its id.

<bean id="thisIsTheViewName" class="....MyView" />

For simple applications this can be the simplest way to translate from view name to view.


As described in the documentation, BeanNameViewResolver resolves Views declared as beans. Usually you need it for some special-purpose views.

Imagine, for example, that one of your controllers should render an Excel spreadsheet. So, you subclass AbstractExcelView and implement your custom logic to render a spreadsheet based on model values:

public class MyExcelView extends AbstractExcelView { ... }

and declare it as a bean:

<bean id = "myExcelView" class = "MyExcelView" />

Then declaring an BeanNameViewResolver makes it available to controllers: when controller returns ModelAndView with view name myExcelView, your spreadsheet will be rendered.

BeanNameViewResolver is usually used in conjunction with some other view resolver that handles "regular" views (so that if BeanNameViewResolver can't find a view, the other resolver tries to find it):

<bean class = "...BeanNameViewResolver">
    <property name = "order" value = "0" />
</bean>

<bean class = "...InternalResourceViewResolver">
    <property name = "order" value = "1" />
    ...
</bean>