记录今天学习黑马的Spring高级时遇到的问题。满老师在讲返回值处理器的时候,由于不想走tomcat服务器的方式渲染视图,采用了FreeMarker模版引擎来渲染。
视频中的配置类如下:
因为没有对应的源代码,这里的形式看的像lambda表达式但是却不是。在困扰的时候,突然发现旁边有有一个小O标志,应该是重写的意思。那么就是说,这里是重写了某个方法。
为什么要重写呢?因为在讲课中经常有些类的方法是受保护的,除了采用反射的方式来获取,另外一种方式就是子类重写。而这里是采用匿名内部类的方式进行重写的。所以其实代码应该如下:
@Configuration
public class WebConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setDefaultEncoding("utf-8");
configurer.setTemplateLoaderPath("classpath:templates");
return configurer;
}
@Bean // FreeMarkerView在借助Spring初始化时, 会要求web环境才会走setConfiguration, 这里想办法去掉了web环境的约束
public FreeMarkerViewResolver viewResolver(FreeMarkerConfigurer configurer) {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver() {
@Override
protected AbstractUrlBasedView instantiateView() {
FreeMarkerView view = new FreeMarkerView() {
@Override
protected boolean isContextRequired() {
return false;
}
};
view.setConfiguration(configurer.getConfiguration());
return view;
}
};
resolver.setContentType("text/html;charset=utf-8");
resolver.setPrefix("/");
resolver.setSuffix(".ftl");
resolver.setExposeSpringMacroHelpers(false);
return resolver;
}
}
而IDEA一折叠后,就变成了上面的模样。