2014-09-05 3 views
0

, как я могу изменить эту конфигурацию XML:XML конфигурации боб для конфигурации кода Java

<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine"> 
     ... 
     <property name="additionalDialects"> 
     <set> 
      <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/> 
     </set> 
     </property> 
     ... 
    </bean> 

к конфигурации кода Java до сих пор у меня есть это я только проблемы в этой части:

<property name="additionalDialects"> 
      <set> 
       <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/> 
      </set> 
      </property> 

это то, что я до сих пор в Java коде:

@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>)

+0

возможно дубликат [Понимание пружинного @Configuration использование класса] (http://stackoverflow.com/questions/24014919/understanding-spring-configuration-class-usage) – Avi

ответ

0

Вы можете создать экземпляр всего двигателя, используя код, похожий на этот. будет применяться

FileSystemXmlApplicationContext appCtx = new FileSystemXmlApplicationContext("myconfigfile.xml"); 
if (appCtx.containsBean("templateEngine") { 
    SpringTemplateEngine engine = (SpringTemplateEngine) appCtx.getBean("templateEngine"); 
} 

Дополнительные диалекты и любые другие свойства вы настроили на двигатель в вашем конфигурационном файле XML.

Возможно, вы захотите рассмотреть использование ClassPathXmlApplicationContext вместо FileSystem в моем примере.

+0

да, но вам все равно нужен файл .xml. Я пытаюсь получить конфигурацию без .xml-файла, так что нет способа сделать этот конфиг без xml-файла? – stackUser2000

+0

А, я неправильно понял вопрос. Похоже, что vp8106 имеет ответ выше, который делает то, что вы хотите. Если это также не удовлетворительный ответ, пожалуйста, добавьте некоторые пояснения, и я попытаюсь снова помочь. –

1

Согласно вашей конфигурации, свойство additionalDialects должно иметь набор, содержащий один компонент. Таким образом, в javaconfig просто создайте экземпляр HashSet, добавьте к нему SpringSecurityDialect bean и присвойте результирующему набору значение additionalDialects. SpringSecurityDialect bean должен быть создан методом, аннотированным @Bean, чтобы контекст приложения Spring знал об этом компоненте для выполнения инициализаторов бина и постпроцессоров.
Следующий код иллюстрирует это:

@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(); 
} 
+0

Пожалуйста, уточните, почему это помогает, отредактировав свой ответ. –

+0

так, где я должен передать эту строку в этом виде конфигурации 'org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect' – stackUser2000

+0

@ stackUser2000 это не просто строка, это имя класса, поэтому поместите ее в раздел импорта вашего класса javaconfig – vp8106

1

Я ударился головой об этом некоторое время сегодня. Ответ лежал в смотрении на источнике Спринг загрузки:

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

@Configuration 
@ConditionalOnClass({ SpringSecurityDialect.class }) 
protected static class ThymeleafSecurityDialectConfiguration { 

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

} 

Так Спринг загрузки (ну, «org.springframework.boot: весна-загрузки-стартер-thymeleaf») будет пытаться впрыснуть org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect. Возможно, это не работает, потому что у меня есть springsecurity4 jar.

В любом случае есть простое решение: просто сделайте то, что пытается сделать Spring Boot. В классе @Configuration, просто добавьте фасоль:

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

Это должен быть принятый ответ – lilalinux

Смежные вопросы