Подтвердить что ты не робот

Доступ Spring beans из сервлета в JBoss

Я хочу написать простой сервлет в JBoss, который вызовет метод на Spring bean. Цель состоит в том, чтобы позволить пользователю запускать внутреннее задание, нажав URL-адрес.

Каков самый простой способ получить ссылку на мой Spring bean в сервлет?

Веб-службы JBoss позволяют вводить WebServiceContext в свой класс обслуживания с помощью аннотации @Resource. Есть ли что-то сопоставимое, что работает в простых сервлетах? Веб-служба для решения этой конкретной проблемы будет использовать кувалду, чтобы раздавить орех.

4b9b3361

Ответ 1

Ваш сервлет может использовать WebApplicationContextUtils для получения контекста приложения, но тогда ваш код сервлета будет иметь прямую зависимость от Spring Framework.

Другим решением является настройка контекста приложения для экспорта Spring bean в контекст сервлета как атрибут:

<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
  <property name="attributes">
    <map>
      <entry key="jobbie" value-ref="springifiedJobbie"/>
    </map>
  </property>
</bean>

Ваш сервлет может извлечь bean из контекста сервлета, используя

SpringifiedJobbie jobbie = (SpringifiedJobbie) getServletContext().getAttribute("jobbie");

Ответ 2

Существует гораздо более сложный способ сделать это. Существует SpringBeanAutowiringSupport внутри org.springframework.web.context.support, что позволяет создать что-то вроде этого:

public class MyServlet extends HttpServlet {

  @Autowired
  private MyService myService;

  public void init(ServletConfig config) {
    super.init(config);
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
      config.getServletContext());
  }
}

Это вызовет Spring для поиска ApplicationContext, привязанного к этому ServletContext (например, созданного с помощью ContextLoaderListener), и введите Spring beans в <<23 > .

Ответ 3

Я нашел один способ сделать это:

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");