依赖注入和构造函数

时间:2016-01-11 10:36:40

标签: java spring-mvc dependency-injection

我有一个名为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;
        }
    }    
}

0 个答案:

没有答案