Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

从这里可以看出,当 classpath 下存在 freemarker.template.Configuration 以及 FreeMarkerConfigurationFactory 时,配置才会生效,也就是说当我们引入了 Freemarker 之后,配置就会生效。但是这里的自动化配置只做了模板位置检查,其他配置则是在导入的 FreeMarkerServletWebConfiguration 配置中完成的。那么我们再来看看 FreeMarkerServletWebConfiguration 类,部分源码如下:

@Configuration

@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)

@ConditionalOnClass({ Servlet.class, FreeMarkerConfigurer.class })

@AutoConfigureAfter(WebMvcAutoConfiguration.class)

class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration {

protected FreeMarkerServletWebConfiguration(FreeMarkerProperties properties) {

super(properties);

}

@Bean

@ConditionalOnMissingBean(FreeMarkerConfig.class)

public FreeMarkerConfigurer freeMarkerConfigurer() {

FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();

applyProperties(configurer);

return configurer;

}

@Bean

@ConditionalOnMissingBean(name = “freeMarkerViewResolver”)

@ConditionalOnProperty(name = “spring.freemarker.enabled”, matchIfMissing = true)

public FreeMarkerViewResolver freeMarkerViewResolver() {

FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();

getProperties().applyToMvcViewResolver(resolver);

return resolver;

}

}

我们来简单看下这段源码:

  1. @ConditionalOnWebApplication 表示当前配置在 web 环境下才会生效。

  2. ConditionalOnClass 表示当前配置在存在 Servlet 和 FreeMarkerConfigurer 时才会生效。

  3. @AutoConfigureAfter 表示当前自动化配置在 WebMvcAutoConfiguration 之后完成。

  4. 代码中,主要提供了 FreeMarkerConfigurer 和 FreeMarkerViewResolver。

  5. FreeMarkerConfigurer 是 Freemarker 的一些基本配置,例如 templateLoaderPath、defaultEncoding 等

  6. FreeMarkerViewResolver 则是视图解析器的基本配置,包含了viewClass、suffix、allowRequestOverride、allowSessionOverride 等属性。

另外还有一点,在这个类的构造方法中,注入了 FreeMarkerProperties:

@ConfigurationProperties(prefix = “spring.freemarker”)

public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {

public static final String DEFAULT_TEMPLATE_LOADER_PATH = “classpath:/templates/”;

public static final String DEFAULT_PREFIX = “”;

public static final String DEFAULT_SUFFIX = “.ftl”;

/**

  • Well-known FreeMarker keys which are passed to FreeMarker’s Configuration.

*/

private Map<String, String> settings = new HashMap<>();

}

FreeMarkerProperties 中则配置了 Freemarker 的基本信息,例如模板位置在 classpath:/templates/ ,再例如模板后缀为 .ftl,那么这些配置我们以后都可以在 application.properties 中进行修改。

如果我们在 SSM 的 XML 文件中自己配置 Freemarker ,也不过就是配置这些东西。现在,这些配置由 FreeMarkerServletWebConfiguration​ 帮我们完成了。

2.创建类


首先我们来创建一个 User 类,如下:

public class User {

private Long id;

private String username;

private String address;

//省略 getter/setter

}

再来创建 UserController

@Controller

public class UserController {

@GetMapping(“/index”)

public String index(Model model) {

List users = new ArrayList<>();

for (int i = 0; i < 10; i++) {

User user = new User();

user.setId((long) i);

user.setUsername(“javaboy>>>>” + i);

user.setAddress(“www.javaboy.org>>>>” + i);

users.add(user);

}

model.addAttribute(“users”, users);

return “index”;

}

}

最后在 freemarker 中渲染数据:

Title
用户编号 用户名称 用户地址

<#list users as user>

${user.id} ${user.username} ${user.address}

</#list>

运行效果如下:

其他配置

================================================================

最后

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:

  • Java基础部分

  • 算法与编程

  • 数据库部分

  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

1714451765919)]

  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

[外链图片转存中…(img-OOHt53ty-1714451765920)]

这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值