Skip to content

Commit 3ee44ca

Browse files
committed
Merge branch '2.6.x' into 2.7.x
Closes gh-30386
2 parents bcb71df + f378627 commit 3ee44ca

File tree

2 files changed

+82
-41
lines changed

2 files changed

+82
-41
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Copyright 2012-2022 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.autoconfigure.thymeleaf;
18+
19+
import org.thymeleaf.ITemplateEngine;
20+
import org.thymeleaf.dialect.IDialect;
21+
import org.thymeleaf.spring5.ISpringTemplateEngine;
22+
import org.thymeleaf.spring5.ISpringWebFluxTemplateEngine;
23+
import org.thymeleaf.spring5.SpringTemplateEngine;
24+
import org.thymeleaf.spring5.SpringWebFluxTemplateEngine;
25+
import org.thymeleaf.templateresolver.ITemplateResolver;
26+
27+
import org.springframework.beans.factory.ObjectProvider;
28+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
29+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
30+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
31+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
32+
import org.springframework.context.annotation.Bean;
33+
import org.springframework.context.annotation.Configuration;
34+
35+
/**
36+
* Configuration classes for Thymeleaf's {@link ITemplateEngine}. Imported by
37+
* {@link ThymeleafAutoConfiguration}.
38+
*
39+
* @author Andy Wilkinson
40+
*/
41+
class TemplateEngineConfigurations {
42+
43+
@Configuration(proxyBeanMethods = false)
44+
static class DefaultTemplateEngineConfiguration {
45+
46+
@Bean
47+
@ConditionalOnMissingBean(ISpringTemplateEngine.class)
48+
SpringTemplateEngine templateEngine(ThymeleafProperties properties,
49+
ObjectProvider<ITemplateResolver> templateResolvers, ObjectProvider<IDialect> dialects) {
50+
SpringTemplateEngine engine = new SpringTemplateEngine();
51+
engine.setEnableSpringELCompiler(properties.isEnableSpringElCompiler());
52+
engine.setRenderHiddenMarkersBeforeCheckboxes(properties.isRenderHiddenMarkersBeforeCheckboxes());
53+
templateResolvers.orderedStream().forEach(engine::addTemplateResolver);
54+
dialects.orderedStream().forEach(engine::addDialect);
55+
return engine;
56+
}
57+
58+
}
59+
60+
@Configuration(proxyBeanMethods = false)
61+
@ConditionalOnWebApplication(type = Type.REACTIVE)
62+
@ConditionalOnProperty(name = "spring.thymeleaf.enabled", matchIfMissing = true)
63+
static class ReactiveTemplateEngineConfiguration {
64+
65+
@Bean
66+
@ConditionalOnMissingBean(ISpringWebFluxTemplateEngine.class)
67+
SpringWebFluxTemplateEngine templateEngine(ThymeleafProperties properties,
68+
ObjectProvider<ITemplateResolver> templateResolvers, ObjectProvider<IDialect> dialects) {
69+
SpringWebFluxTemplateEngine engine = new SpringWebFluxTemplateEngine();
70+
engine.setEnableSpringELCompiler(properties.isEnableSpringElCompiler());
71+
engine.setRenderHiddenMarkersBeforeCheckboxes(properties.isRenderHiddenMarkersBeforeCheckboxes());
72+
templateResolvers.orderedStream().forEach(engine::addTemplateResolver);
73+
dialects.orderedStream().forEach(engine::addDialect);
74+
return engine;
75+
}
76+
77+
}
78+
79+
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,15 @@
2424
import nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect;
2525
import org.apache.commons.logging.Log;
2626
import org.apache.commons.logging.LogFactory;
27-
import org.thymeleaf.dialect.IDialect;
2827
import org.thymeleaf.extras.java8time.dialect.Java8TimeDialect;
2928
import org.thymeleaf.extras.springsecurity5.dialect.SpringSecurityDialect;
30-
import org.thymeleaf.spring5.ISpringTemplateEngine;
3129
import org.thymeleaf.spring5.ISpringWebFluxTemplateEngine;
3230
import org.thymeleaf.spring5.SpringTemplateEngine;
33-
import org.thymeleaf.spring5.SpringWebFluxTemplateEngine;
3431
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
3532
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
3633
import org.thymeleaf.spring5.view.reactive.ThymeleafReactiveViewResolver;
3734
import org.thymeleaf.templatemode.TemplateMode;
38-
import org.thymeleaf.templateresolver.ITemplateResolver;
3935

40-
import org.springframework.beans.factory.ObjectProvider;
4136
import org.springframework.boot.autoconfigure.AutoConfiguration;
4237
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4338
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -57,6 +52,7 @@
5752
import org.springframework.context.ApplicationContext;
5853
import org.springframework.context.annotation.Bean;
5954
import org.springframework.context.annotation.Configuration;
55+
import org.springframework.context.annotation.Import;
6056
import org.springframework.core.Ordered;
6157
import org.springframework.security.web.server.csrf.CsrfToken;
6258
import org.springframework.util.MimeType;
@@ -79,6 +75,8 @@
7975
@AutoConfiguration(after = { WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
8076
@EnableConfigurationProperties(ThymeleafProperties.class)
8177
@ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class })
78+
@Import({ TemplateEngineConfigurations.ReactiveTemplateEngineConfiguration.class,
79+
TemplateEngineConfigurations.DefaultTemplateEngineConfiguration.class })
8280
public class ThymeleafAutoConfiguration {
8381

8482
@Configuration(proxyBeanMethods = false)
@@ -129,23 +127,6 @@ SpringResourceTemplateResolver defaultTemplateResolver() {
129127

130128
}
131129

132-
@Configuration(proxyBeanMethods = false)
133-
protected static class ThymeleafDefaultConfiguration {
134-
135-
@Bean
136-
@ConditionalOnMissingBean(ISpringTemplateEngine.class)
137-
SpringTemplateEngine templateEngine(ThymeleafProperties properties,
138-
ObjectProvider<ITemplateResolver> templateResolvers, ObjectProvider<IDialect> dialects) {
139-
SpringTemplateEngine engine = new SpringTemplateEngine();
140-
engine.setEnableSpringELCompiler(properties.isEnableSpringElCompiler());
141-
engine.setRenderHiddenMarkersBeforeCheckboxes(properties.isRenderHiddenMarkersBeforeCheckboxes());
142-
templateResolvers.orderedStream().forEach(engine::addTemplateResolver);
143-
dialects.orderedStream().forEach(engine::addDialect);
144-
return engine;
145-
}
146-
147-
}
148-
149130
@Configuration(proxyBeanMethods = false)
150131
@ConditionalOnWebApplication(type = Type.SERVLET)
151132
@ConditionalOnProperty(name = "spring.thymeleaf.enabled", matchIfMissing = true)
@@ -198,25 +179,6 @@ private String appendCharset(MimeType type, String charset) {
198179

199180
}
200181

201-
@Configuration(proxyBeanMethods = false)
202-
@ConditionalOnWebApplication(type = Type.REACTIVE)
203-
@ConditionalOnProperty(name = "spring.thymeleaf.enabled", matchIfMissing = true)
204-
static class ThymeleafReactiveConfiguration {
205-
206-
@Bean
207-
@ConditionalOnMissingBean(ISpringWebFluxTemplateEngine.class)
208-
SpringWebFluxTemplateEngine templateEngine(ThymeleafProperties properties,
209-
ObjectProvider<ITemplateResolver> templateResolvers, ObjectProvider<IDialect> dialects) {
210-
SpringWebFluxTemplateEngine engine = new SpringWebFluxTemplateEngine();
211-
engine.setEnableSpringELCompiler(properties.isEnableSpringElCompiler());
212-
engine.setRenderHiddenMarkersBeforeCheckboxes(properties.isRenderHiddenMarkersBeforeCheckboxes());
213-
templateResolvers.orderedStream().forEach(engine::addTemplateResolver);
214-
dialects.orderedStream().forEach(engine::addDialect);
215-
return engine;
216-
}
217-
218-
}
219-
220182
@Configuration(proxyBeanMethods = false)
221183
@ConditionalOnWebApplication(type = Type.REACTIVE)
222184
@ConditionalOnProperty(name = "spring.thymeleaf.enabled", matchIfMissing = true)

0 commit comments

Comments
 (0)