前言

因为有些方法是 static 修饰的,但是方法内无法使用非 static 变量,这个时候我们就需要对其进行转换。

使用@PostConstruct

定义一个 private MessageSource messageSource,并使用 @Resource 注入,使用 @PostConstruct 做到自动执行方法(使用此注解,当这个类被加载时,便会执行被修饰的方法),在此方法内将注入好的 messageSource 赋值给 staticMessageSource

@Resource
private MessageSource messageSource;

private static MessageSource staticMessageSource;

@PostConstruct
public void init() {
    staticMessageSource = this.messageSource;
}

@GetMapping("/test")
public String test() {
    String path = "i18n.key.test";
    return staticMessageSource.getMessage(path, null, LocaleContextHolder.getLocale());
}

使用@Resource

这个方法我是根据翻阅资料才了解到的,因为最初的我想直接 @Resource 到静态变量中

@Resource
private static MessageSource messageSource

显然这样是不被允许的,会有提示 Don't autowire static members
那么如何使用 @Resource 优雅的注入到静态变量中呢?

private static MessageSource messageSource;

@Resource
public void setMessageSource(MessageSource messageSource) {
    LanguageInternationalApplication.messageSource = messageSource;
}

@GetMapping("/test")
public String test() {
    String path = "i18n.key.test";
    return messageSource.getMessage(path, null, LocaleContextHolder.getLocale());
}
@Resource 注解可以被用在方法上,通过方法给此静态变量赋值
LanguageInternationalApplication 是该类的名字
最后修改:2023 年 01 月 12 日
如果觉得我的文章对你有用,请随意赞赏