1、概念
当使用BeanNameViewResolver时,viewName的含义为bean的ID或name,返回值为View对象或它的子类。
它会从上下文中根据viewName获取View对象,默认的上下文有两个WebApplicationContext,ApplicationContext。ApplicationContext为WebApplicationContext的父上下文。
WebApplicationContext,它根据spring-mvc的配置信息创建。
ApplicationContext,它是配置数据源,事务,注入Service等,它是根据application-context的配置信息创建。
2、使用
第一步,使用内置的View对象或者实现View接口自定义View对象。
第二步,在上下文中注入View对象,在webApplicationContext,ApplicationContext二者之间选择其一。
第三步,注册BeanNameViewResolver对象,
第四步,handler的返回值为View对象的标识,id,name,alias都可
3、示例
1、第一步,注入BeanNameViewResolver,调用registry的beanName方法。
/** * 配置视图解析器 */ @Override public void configureViewResolvers(ViewResolverRegistry registry) { // 注册BeanNameViewResolver registry.beanName(); // 注册 registry.viewResolver(getInternalResourceViewResolver()); }
2、第二步,编写自定义视图类MyView实现View接口。
public class MyView implements View { @Override public String getContentType() { return "text/html"; } @Override public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType(getContentType()); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<h3>测试BeanNameViewResolver</h3>"); } }
3、第三步,注入MyView,bean的名称为”testMyView”(名称是任意的); 可以注入到webApplicationContext或ApplicationContext
/** * 配置视图解析器 */ @Override public void configureViewResolvers(ViewResolverRegistry registry) { // 注册BeanNameViewResolver registry.beanName(); }
4、第四步,验证,handler方法中返回”testMyView”字符串即可。