我有一个名为Template
的班级。在其中我创建了一个类ClasseDiProva
的新实例。
在ClasseDiProva
内{I} @Autowire
一个名为I18nMessageHandler
的班级。当我致电ClasseDiProva.stampaMessaggio()
时,我称之为I18nMessageHandler
的方法,我得到RunTimeException
,但我不明白为什么。
如果在课程Template
内{I} @autowire
ClasseDiProva
而不是ClasseDiProva classeDiProva = new ClasseDiProva()
,则一切正常。
我认为是依赖注入问题。
问题是我需要做ClasseDiProva classeDiProva = new ClasseDiProva(voce)
,因为ClasseDiProva
有很多构造函数,我必须使用一个特定的构造函数作为参数对象Voce
,这是一个对象我只在Template.getPageTitle
内知道。
@Component
public class Template {
public String getPageTitle(Voce voce){
ClasseDiProva classeDiProva = new ClasseDiProva(voce);
classeDiProva.stampaMessaggio();
}
}
@Component
public class ClasseDiProva {
private Voce voce;
@Autowired
private I18nMessageHandler i18nMessageHandler;
public ClasseDiProva() {
}
public ClasseDiProva(Voce voce) {
this.voce = voce;
}
public void stampaMessaggio(){
System.out.println(i18nMessageHandler.getMessage(this.voce.getTitle, null, "defaultMessage"));
}
}
@Component
//@Configurable
public class I18nMessageHandler {
@Autowired
private ReloadableResourceBundleMessageSource messageSource;
@Autowired
private LogHandler logHandler;
final static Logger logger = Logger.getLogger(I18nMessageHandler.class);
public I18nMessageHandler() {
}
public String getMessage(String codiceStringa, Object[] args, String defaultMessage) {
try {
return messageSource.getMessage(codiceStringa, args, defaultMessage, LocaleContextHolder.getLocale());
}
catch (Exception e) {
logHandler.writeLog(logger, LogHandler.ERROR, e.getMessage());
return defaultMessage;
}
}
}