Использование Spring в портлете без Spring MVC


Есть ли способ разработать портлеты с spring без использования DispatcherPortlet? Я хочу использовать другие технологии для пользовательского интерфейса, в основном Vaadin. Весна используется для Ди и других вещей. Есть ли что-то подобное классу ContextLoaderListener на стороне портлета?

3 2

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 - это просто строковая константа, которую я придумал. Я все еще открыт для лучших решений.

Вы можете использовать PortletApplicationContextUtils для извлечения контекста веб-приложения:

ApplicationContext ctx = Portletapplicationcontextils.getWebApplicationContext(getPortletContext ());

Тогда вам просто нужно добавить некоторую конфигурацию в свой веб.XML.