我在Spring Boot 2应用程序中制作了一个自定义的Thymeleaf方言。该方言包含各种TagProcessors
。每个TagProcessor
扩展了一个抽象BaseTagprocessor
,该抽象扩展了AbstractElementTagProcessor
。
BaseTagProcessor
的主要部分是:
public abstract class BaseTagProcessor extends AbstractElementTagProcessor {
...
@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag, IElementTagStructureHandler structureHandler) {
ITemplateResolver resolver = getTemplateResolver();
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
Context templateContext = getContext(context, tag);
String processedTemplate = templateEngine.process("component/form/" + getTemplateName(), templateContext);
...
}
...
}
此代码的问题在于,它每次都会创建一个新的TemplateEngine
,因此我想使用@Autowire
。但是,如果我添加以下内容:
@Autowired
protected SpringTemplateEngine te;
其中WebConfig中的SpringTemplateEngine
定义为:
@Bean
public SpringTemplateEngine templateEngine(){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(getTemplateResolver());
templateEngine.addDialect(layoutDialect());
templateEngine.addDialect(formBuilderDialect());
return templateEngine;
}
还将@Component
注释添加到我的BaseTagProcessor
:
@Component
public abstract class BaseTagProcessor extends AbstractElementTagProcessor {
自动连线引擎仍为null
。
我怎么了?