2016-11-17 190 views
1

我目前正在建立與Thymeleaf一個Spring MVC的項目setApplicationContext,在下面的教程:http://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html#spring-mvc-configuration如何避免調用一個春天

想去吻的代碼,我先被替換implements ApplicationContextAware@Inject private ApplicationContext applicationContext setter方法。 但我不明白爲什麼我必須在SpringResourceTemplateResolver上調用setApplicationContext(),而它繼承了Spring接口ApplicationContextAware

如何避免這種情況?

編輯: 如果我刪除了templateResolver.setApplicationContext(applicationContext);行,我訪問根時得到此異常:

java.lang.IllegalArgumentException: Application Context cannot be null 
    org.thymeleaf.util.Validate.notNull(Validate.java:37) 
    org.thymeleaf.spring4.templateresource.SpringResourceTemplateResource.<init>(SpringResourceTemplateResource.java:64) 
    org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver.computeTemplateResource(SpringResourceTemplateResolver.java:69) 
    org.thymeleaf.templateresolver.AbstractConfigurableTemplateResolver.computeTemplateResource(AbstractConfigurableTemplateResolver.java:1221) 
    org.thymeleaf.templateresolver.AbstractTemplateResolver.resolveTemplate(AbstractTemplateResolver.java:356) 
    org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:840) 
    org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:608) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1087) 
    org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1061) 
    org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335) 
    org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:189) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

注:我用的是最新版本:春天4.3.3.RELEASE和Thymeleaf 3.0.2。 RELEASE(當然我輸入thymeleaf-spring4)。

+0

這只是一個建議,並沒有回答你的問題:你可以嘗試使用Spring Boot和http://start.spring.io/,它會生成一個可以使用並預先配置Thymeleaf和Spring MVC的項目。 – kamwo

+0

您不需要,也不需要注入上下文。春天會照顧它。 –

+0

感謝您的建議@kamwo,我知道所有Spring Boot自動生成的項目。但我想完全理解Spring Java配置如何工作,因爲我幾乎總是遇到基於XML的配置項目(傳統項目...)。以及由我自己組織整個項目和依賴項。 – maxxyme

回答

0

重新檢查我錯過的內容後,似乎缺少@Configuration註釋是Spring沒有將ApplicationContext注入到SpringResourceTemplateResolver中的來源。