Я пытаюсь инициализировать и кэшировать экземпляр конфигурации Freemarker для использования в моем приложении Restlet. Проблема в том, что ContextTemplateLoader
принимает аргумент типа org.restlet.Context
, который доступен через вызов метода getContext()
в приложении. Как можно получить доступ к этому контексту «внутри» контейнера Spring, где Restlet является «основным контейнером» (т. Е. Это приложение рестлета, которое использует Spring, а не наоборот)?
А пока я кеширую конфигурацию freemarker:
public class HelloWorldComponent extends Component {
//Cache freemarkerConfiguration
private static Configuration freemarkerConfiguration;
public HelloWorldComponent()
{
freemarkerConfiguration = new Configuration();
// Must pass getContext() as argument - prevents 'springification?'
ContextTemplateLoader loader = new ContextTemplateLoader(getContext(), "war:///WEB-INF");
freemarkerConfiguration.setTemplateLoader(loader);
/* All other beans created and cached by loading the SpringContext */
SpringContext springContext = new SpringContext(getContext());
springContext.getXmlConfigRefs().add("war:///WEB-INF/applicationContext.xml");
getServers().add(Protocol.HTTP);
this.getDefaultHost().attach(new HelloWorldApplication());
}
public static Configuration getFreemarkerConfiguration()
{
return freemarkerConfiguration;
}
Я бы лично предпочел, чтобы конфигурация freemarker была кеширована самой Spring, но ContextTemplateLoader
требует Context
, и это недоступно вне приложения. Наличие статического метода выглядит как хак.
Каков самый простой / простой / самый чистый способ создания экземпляра freemarker в Spring?
Причина: бессмысленно загружать конфигурацию перед каждым доступом к шаблону (шаблонам), и лучше ее кешировать. Было бы здорово, если бы это можно было определить в самой Spring, а IoC только что был создан в org.restlet.Component
Кажется, есть статический метод Context.getCurrent()
, который можно использовать для извлечения текущего контекста, но я не знаю, как вызвать его через пружину (если вообще). Я не заинтересован в том, чтобы иметь Spring MVC libs и т. Д., Просто чтобы создать экземпляр конфигурации freemarker (есть способов сделать это , но я не хочу связанных с Spring сервлетов и т. Д.)