gpt4 book ai didi

java - @Autowired 尽管@configuration创建空对象

转载 作者:行者123 更新时间:2023-12-02 03:35:44 24 4
gpt4 key购买 nike

我有以下配置类

@org.springframework.context.annotation.Configuration
public class TemplateConfiguration {

@Bean
public Configuration configuration() {
Configuration configuration = new Configuration(new Version(2, 3, 23));
configuration.setClassForTemplateLoading(TemplateConfiguration.class, "/templates/");
configuration.setDefaultEncoding("UTF-8");
configuration.setLocale(Locale.US);
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
return configuration;
}
}

我在以下@service 中使用它

@Service
public class FreeMarkerService {

@Autowired
private Configuration configuration;

private static final Logger logger = LoggerFactory.getLogger(FreeMarkerService.class);

public String process() {
try {
Template template = configuration.getTemplate("someName");
....
} catch (IOException | TemplateException e) {
logger.error("Error while processing FreeMarker template: " + e);
throw new RuntimeException(e);
}
}
}

但是当我尝试像这样调用 process() 时

FreeMarkerService f = new FreeMarkerService()
f.process()

由于配置对象为空,我收到一个空异常

我想使用@Autowired和@Configuration注释创建一个实例我做错了什么?

最佳答案

您应该使用 Spring 实例化的 FreeMarkerService 对象,并尽可能避免对 Controller 或服务等对象使用 new 关键字。

例如,

@Service
public class SampleService {

@Autowired
private FreeMarkerService freeMarkerService;

public String callProcess() {
return freeMarkerService.process();
}
}

您可以在许多帖子中找到更多详细信息,例如 this .

关于java - @Autowired 尽管@configuration创建空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46156045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com