前言
因为有些方法是 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
是该类的名字