Dostęp do Spring beans z servlet w JBoss

Chcę napisać prosty servlet w JBoss, który wywoła metodę na Spring bean. Celem jest umożliwienie użytkownikowi rozpoczęcia wewnętrznego zadania poprzez naciśnięcie adresu URL.

Jaki jest najprostszy sposób, aby zdobyć odniesienie do mojej wiosennej fasoli w servlet?

JBoss web services pozwala na wstrzyknięcie WebServiceContext do klasy service przy użyciu adnotacji @ Resource. Czy jest coś porównywalnego, co działa w zwykłych serwletach? Serwis internetowy, który rozwiąże ten konkretny problem użyłbym młota kowalskiego do zmiażdżenia orzecha.

Author: Oliver Gierke, 2009-01-22

3 answers

Twój servlet może użyć Webaplicationcontextutils, aby uzyskać kontekst aplikacji, ale wtedy twój kod servleta będzie miał bezpośrednią zależność od frameworka Spring.

Innym rozwiązaniem jest skonfigurowanie kontekstu aplikacji, aby eksportować Spring bean do kontekstu servleta jako atrybut:

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

Twój servlet może pobrać bean z kontekstu servleta używając

SpringifiedJobbie jobbie = (SpringifiedJobbie) getServletContext().getAttribute("jobbie");
 31
Author: Chin Huang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 23:07:51

Jest na to znacznie bardziej wyrafinowany sposób. Istnieje SpringBeanAutowiringSupportwewnątrz org.springframework.web.context.support, który pozwala zbudować coś takiego:

public class MyServlet extends HttpServlet {

  @Autowired
  private MyService myService;

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

Spowoduje to, że Spring wyszukuje ApplicationContext powiązane z tym ServletContext (np. utworzone przez ContextLoaderListener) i wstrzykuje dostępne w tym ApplicationContext wiosenne ziarna.

 59
Author: Oliver Gierke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-29 21:29:46

Znalazłem na to jeden sposób:

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");
 7
Author: Sophie Gage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 22:28:38