如何使用Spring @Configuration引用一个尚不存在的bean

时间:2016-01-19 15:09:11

标签: java spring spring-mvc thymeleaf

我不喜欢XML配置(那些大而难以阅读的文件),我更喜欢使用java代码而不是它们。我正在使用一个基于Spring(Core,MVC)和Thymeleaf作为模板引擎的简单Web项目。

代码片段如下所示。

@EnableWebMvc
@Configuration
@ComponentScan({"com.github.tobilko"})
public class DependencyConfiguration {

    @Bean(name = "templateResolver")
    public ServletContextTemplateResolver getTemplateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();

        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");

        return resolver;
    }

    @Bean(name = "templateEngine")
    public SpringTemplateEngine getTemplateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(/*?*/);
        return engine;
    }

}

我对我注意到/*?*/的地方很感兴趣。我想引用templateResolver bean。 我必须在这里粘贴什么?如何引用尚未存在的bean?

XML文件中的示例bean配置:

<bean id="templateResolver"
       class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
  <property name="prefix" value="/WEB-INF/templates/" />
  <property name="suffix" value=".html" />
  <property name="templateMode" value="HTML5" />
</bean>

<bean id="templateEngine"
      class="org.thymeleaf.spring4.SpringTemplateEngine">
  <property name="templateResolver" ref="templateResolver" />
</bean>

以下代码

engine.setTemplateResolver(
    (ITemplateResolver)
    new AnnotationConfigApplicationContext().getBean("templateResolver")
);

抛出java.lang.IllegalStateException

  

上下文尚未刷新

1 个答案:

答案 0 :(得分:2)

使用此:

public SpringTemplateEngine getTemplateEngine(ServletContextTemplateResolver templateResolver) {

您可以将已定义的bean注入使用@Bean注释的方法,也可以在getTemplateResolver()内调用getTemplateEngine()