Использование Spring в портлете без Spring MVC
Есть ли способ разработать портлеты с spring без использования DispatcherPortlet? Я хочу использовать другие технологии для пользовательского интерфейса, в основном Vaadin. Весна используется для Ди и других вещей. Есть ли что-то подобное классу ContextLoaderListener на стороне портлета?
3 ответа:
Глядя на документацию Spring: вы можете создать
ApplicationContext
следующим образом:ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});
Ссылка на xml-файлы в пути к классу.
Затем вы можете получить бобы, позвонив
context.getBean("beanName")
. Нет необходимости в весеннем MVC.
Я надеялся на более подробный ответ, чем тот, что дал Ноэль. Может быть, в этом есть какая-то лучшая практика? Вот мое текущее решение:
Укажите расположение xml-файла в качестве параметра init для моего портлета. Мой метод init выглядит примерно так
@Override public void init(PortletConfig config) throws PortletException { super.init(config); String configLocations = config.getInitParameter("contextConfigLocation"); ClassPathXmlApplicationContext springContext = new ClassPathXmlApplicationContext(); springContext.setConfigLocation(configLocations); springContext.refresh(); config.getPortletContext().setAttribute(APPLICATION_CONTEXT_ATTRIBUTE, springContext); }
Теперь я могу обращаться к своему applicationContext через PortletContext каждый раз, когда мне это нужно.
(ApplicationContext) portalContext.getAttribute(APPLICATION_CONTEXT_ATTRIBUTE);
APPLICATION_CONTEXT_ATTRIBUTE - это просто строковая константа, которую я придумал. Я все еще открыт для лучших решений.