Spring使用FreeMarker模板时类型转换报错求解决方案
Spring整合FreeMarker类型转换报错解决方案
错误根因
报错核心信息:无法将
freemarker.template.Configuration类型转换为org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean类型
该错误是因为FreeMarkerConfigurationFactoryBean是Spring的FactoryBean接口实现类,Spring容器默认会返回工厂类生产的业务对象(即FreeMarker原生的Configuration配置实例),而非工厂类本身,因此注入时出现类型不匹配。
可选解决方案
方案一:调整业务类属性类型(最优方案)
直接在DomainManager类中将待注入属性的类型修改为freemarker.template.Configuration,对应调整Setter方法的入参类型即可,无需修改现有XML配置。
代码示例:
import freemarker.template.Configuration; public class DomainManager { // 替换原FreeMarkerConfigurationFactoryBean类型 private Configuration freeMarkerConfiguration; private String sampleFile; public void setFreeMarkerConfiguration(Configuration freeMarkerConfiguration) { this.freeMarkerConfiguration = freeMarkerConfiguration; } public void setSampleFile(String sampleFile) { this.sampleFile = sampleFile; } // 其余业务逻辑省略 }
方案二:修改XML注入配置(适配不修改业务代码场景)
如果确实需要注入FreeMarkerConfigurationFactoryBean工厂类本身,只需在XML的ref属性值前添加&前缀,即可告诉Spring返回工厂类实例而非其生产的对象:
修改后的XML配置:
<bean id="domainManager" class="DomainManager"> <property name="freeMarkerConfigurationFactoryBean" ref="&freeMarkerConfigurationFactoryBean"/> <property name="sampleFile" value="sampleFile.ftl" /> </bean>
内容的提问来源于stack exchange,提问作者Shiva D
相关产品推荐
相关产品推荐

