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.
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");
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 SpringBeanAutowiringSupport
wewną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.
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");
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