首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xml bean配置到java代码配置

xml bean配置到java代码配置
EN

Stack Overflow用户
提问于 2014-09-06 00:04:20
回答 3查看 1.2K关注 0票数 0

如何更改此xml配置:

代码语言:javascript
复制
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
      ...
      <property name="additionalDialects">
        <set>
          <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/>
        </set>
      </property>
      ...
    </bean>

到目前为止,对于java代码配置,我只有这一部分有问题:

代码语言:javascript
复制
<property name="additionalDialects">
            <set>
              <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/>
            </set>
          </property>

这就是我到目前为止在java代码中所做的:

代码语言:javascript
复制
   @Bean
    public SpringSecurityDialect springSecurityDialect() {
        return new SpringSecurityDialect();
    }

    @Bean 
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine  =  new SpringTemplateEngine();
        engine.setTemplateResolver( templateResolver() );
        engine.setMessageSource( messageSource() );

        //DIALECTS
                Set<SpringSecurityDialect> ssdSet = new HashSet<SpringSecurityDialect>();       
                ssdSet.add( springSecurityDialect() );
                engine.setAdditionalDialects( ssdSet ); <-- this line give me this error
        return engine;
    }

这一行给出了这个错误:The method setAdditionalDialects(Set<IDialect>) in the type TemplateEngine is not applicable for the arguments (Set<SpringSecurityDialect>)

EN

回答 3

Stack Overflow用户

发布于 2015-07-03 08:40:23

今天我用头撞了一段时间。答案在于查看Spring Boot源代码:

https://github.com/spring-projects/spring-boot/blob/v1.2.5.RELEASE/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java

代码语言:javascript
复制
@Configuration
@ConditionalOnClass({ SpringSecurityDialect.class })
protected static class ThymeleafSecurityDialectConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public SpringSecurityDialect securityDialect() {
        return new SpringSecurityDialect();
    }

}

所以Spring Boot (好的,"org.springframework.boot:spring-boot-starter-thymeleaf")将尝试注入org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect.可能是因为我有springsecurity4 jar,所以它不能工作。

在任何情况下,都有一个简单的解决方案:只需执行Spring Boot尝试执行的操作。在@Configuration类中,只需添加bean:

代码语言:javascript
复制
@Bean
public SpringSecurityDialect securityDialect() {
    return new SpringSecurityDialect();
}
票数 2
EN

Stack Overflow用户

发布于 2014-09-06 05:49:23

根据您的配置,属性additionalDialects应该分配一个包含一个bean的集合。因此,在javaconfig中,只需创建一个HashSet实例,向其添加SpringSecurityDialect bean,并将结果集分配给additionalDialects属性。Spring应该由带有@Bean注释的方法创建,以便让SpringSecurityDialect应用程序上下文知道该bean,从而执行bean初始化器和后处理器。

下面的代码对此进行了说明:

代码语言:javascript
复制
@Bean
public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine  =  new SpringTemplateEngine();
        engine.setTemplateResolver( templateResolver() );
        engine.setMessageSource( messageSource() );
        Set<SpringSecurityDialect> ssdSet = new HashSet<SpringSecurityDialect>();
        ssdSet.add( springSecurityDialect() );
        engine.setAdditionalDialects( ssdSet );

        return engine;
    }

@Bean
public SpringSecurityDialect springSecurityDialect() {
    return new SpringSecurityDialect();
}
票数 1
EN

Stack Overflow用户

发布于 2014-09-06 01:01:38

您可以使用类似下面的代码实例化整个引擎。

代码语言:javascript
复制
FileSystemXmlApplicationContext appCtx = new FileSystemXmlApplicationContext("myconfigfile.xml");
if (appCtx.containsBean("templateEngine") {
   SpringTemplateEngine engine = (SpringTemplateEngine) appCtx.getBean("templateEngine");
}

将应用您在xml配置文件中在引擎上设置的其他方言和任何其他属性。

在我的示例中,您可能希望使用ClassPathXmlApplicationContext而不是FileSystem。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25689910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档