Posted at

Spring BootでThymeleafのDialectを追加する方法

More than 1 year has passed since last update.


環境

Spring Boot 2.0


デフォルトで使えるDialect


  • Java8TimeDialect

spring-boot-starter-thymeleafの依存性として入っていて、かつAuto Configurationクラス内で追加されているので、何もしないでも使うことができます。


依存性を追加するだけでOKなDialect


  • SpringSecurityDialect

  • LayoutDialect

  • DataAttributeDialect

上記の3つはAuto Configuration対象になっているため、依存性を追加するだけで使うことが出来ます。

ここらへんを読んでみてください。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java#L297


その他のDialect(自作のDialectなど)

上記以外のDialectについては、適当にJava Configクラスを作成してDialectをBean定義すればOKです。

@Configuration

public class ThymeleafDialectConfig {

@Bean
public FooDialect fooDialect() {
return new FooDialect();
}

@Bean
public BarDialect barDialect() {
return new BarDialect();
}
}

Bean定義すれば、Auto Configurationクラスによって使われます。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java#L143


やってはいけなくはないけど・・・

SpringTemplateEngine を自分でBean定義してもいいのですが、Auto Configurationクラスで定義している SpringTemplateEngine のBeanが無効化されてしまいますので、なるべくやらないようにしましょう。


これはなるべくしない

@Configuration

public class ThymeleafDialectConfig {

@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
...
engine.addDialect(new SpringSecurityDialect());
engine.addDialect(new LayoutDialect());
engine.addDialect(new DataAttributeDialect());
engine.addDialect(new FooDialect());
engine.addDialect(new BarDialect());
return engine;
}
}