Freemarker 配置的自动装配失败
Autowiring of Freemarker configuration fails
我正在尝试使用 Freemarker 模板引擎发送 html 格式的电子邮件。
我不得不在几个服务中这样做。
在一项服务中,freemarker 运行良好,但在另一项服务中则不然。
但是与 freemarker 相关的代码实际上是相同的。
的自动装配
@Autowired
private Configuration freeMarkerConfig;
不在一项服务中工作,但在另一项服务中工作。
自动装配出现在层次结构中(例如控制器自动装配服务,服务自动装配邮件服务,邮件服务自动装配另一个组件,自动装配 freemarker ...
我不知道如何解决这个问题。
错误堆栈跟踪:
Exception encountered during context initialization - cancelling refresh attempt:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'userController':
Unsatisfied dependency expressed through field 'userService':
Error creating bean with name 'userService':
Unsatisfied dependency expressed through field 'mailService':
Error creating bean with name 'mailServiceImpl':
Unsatisfied dependency expressed through field 'mailMessages':
Error creating bean with name 'mailMessages':
Unsatisfied dependency expressed through field 'freeMarkerConfig':
No qualifying bean of type [freemarker.template.Configuration] found for dependency [freemarker.template.Configuration]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [freemarker.template.Configuration] found for dependency [freemarker.template.Configuration]: expected at least 1 bean which qualifies as autowire candidate for this dependency.
因为我使用的是spring-boot 1.4.0,所以不需要提供更多配置,还是我错了?所以我没有进一步的 xml 或 java freemarker 配置。我没有配置它,因为不需要在我使用 freemarker 的其他服务中配置任何东西。
As I am using spring-boot 1.4.0, there's no need to provide more
configuration, or am I wrong ? So i dont have any further xml nor java
configuration for freemarker.. I didnt configured it, as there was no
need to configure anything in other services, where I use freemarker.
除非您使用的入门项目会自动设置一个配置 Freemarker 引擎的 bean,否则您需要创建一个。像这样:
@Configuration
public class MyConfiguration {
@Bean
freemarker.template.Configuration freeMarkerConfig() {
return someConfigBeanInstantiatedHere;
}
}
This 看起来像是为您设置 Freemarker 的入门项目的一个很好的参考。
OOB 与 spring 有一个由名称 freeMarkerConfiguration 提供的配置,因此您无需定义自己的 bean 进行配置。你只需要定义一个 FreeMarkerConfigurationFactoryBean 类型的 bean。
示例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean;
@Configuration
public class FreemarkerConfig {
@Bean
public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() {
FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
bean.setTemplateLoaderPath("/templates/");
return bean;
}
}
现在在您的服务中 class 只需使用 @Resource 或 @Autowire(不推荐):
@Resource
private Configuration freeMarkerConfiguration;
请检查 bean 的名称“freeMarkerConfiguration”。此 bean 已在 spring-boot-autoconfigure 附带的 OOB class 文件 'FreeMarkerReactiveWebConfiguration' 中定义。考虑到我使用的是 webflux,class 名称具有反应性,但在 spring web 的其他情况下,会有类似“FreeMarkerAutoConfiguration.FreeMarkerWebConfiguration”
的内容
我正在尝试使用 Freemarker 模板引擎发送 html 格式的电子邮件。 我不得不在几个服务中这样做。 在一项服务中,freemarker 运行良好,但在另一项服务中则不然。 但是与 freemarker 相关的代码实际上是相同的。
的自动装配@Autowired
private Configuration freeMarkerConfig;
不在一项服务中工作,但在另一项服务中工作。 自动装配出现在层次结构中(例如控制器自动装配服务,服务自动装配邮件服务,邮件服务自动装配另一个组件,自动装配 freemarker ... 我不知道如何解决这个问题。 错误堆栈跟踪:
Exception encountered during context initialization - cancelling refresh attempt:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'userController':
Unsatisfied dependency expressed through field 'userService':
Error creating bean with name 'userService':
Unsatisfied dependency expressed through field 'mailService':
Error creating bean with name 'mailServiceImpl':
Unsatisfied dependency expressed through field 'mailMessages':
Error creating bean with name 'mailMessages':
Unsatisfied dependency expressed through field 'freeMarkerConfig':
No qualifying bean of type [freemarker.template.Configuration] found for dependency [freemarker.template.Configuration]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [freemarker.template.Configuration] found for dependency [freemarker.template.Configuration]: expected at least 1 bean which qualifies as autowire candidate for this dependency.
因为我使用的是spring-boot 1.4.0,所以不需要提供更多配置,还是我错了?所以我没有进一步的 xml 或 java freemarker 配置。我没有配置它,因为不需要在我使用 freemarker 的其他服务中配置任何东西。
As I am using spring-boot 1.4.0, there's no need to provide more configuration, or am I wrong ? So i dont have any further xml nor java configuration for freemarker.. I didnt configured it, as there was no need to configure anything in other services, where I use freemarker.
除非您使用的入门项目会自动设置一个配置 Freemarker 引擎的 bean,否则您需要创建一个。像这样:
@Configuration
public class MyConfiguration {
@Bean
freemarker.template.Configuration freeMarkerConfig() {
return someConfigBeanInstantiatedHere;
}
}
This 看起来像是为您设置 Freemarker 的入门项目的一个很好的参考。
OOB 与 spring 有一个由名称 freeMarkerConfiguration 提供的配置,因此您无需定义自己的 bean 进行配置。你只需要定义一个 FreeMarkerConfigurationFactoryBean 类型的 bean。
示例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean;
@Configuration
public class FreemarkerConfig {
@Bean
public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() {
FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
bean.setTemplateLoaderPath("/templates/");
return bean;
}
}
现在在您的服务中 class 只需使用 @Resource 或 @Autowire(不推荐):
@Resource
private Configuration freeMarkerConfiguration;
请检查 bean 的名称“freeMarkerConfiguration”。此 bean 已在 spring-boot-autoconfigure 附带的 OOB class 文件 'FreeMarkerReactiveWebConfiguration' 中定义。考虑到我使用的是 webflux,class 名称具有反应性,但在 spring web 的其他情况下,会有类似“FreeMarkerAutoConfiguration.FreeMarkerWebConfiguration”
的内容