2009-01-21 13 views
24

JBoss’ta basit bir servlet yazmak istiyorum. Amaç, bir kullanıcının bir URL'ye basarak dahili bir işi başlatabilmesini sağlamaktır.Erişim JBoss içinde bir servletten gelen bahar fasulyeleri

Sunucumdaki Spring Bean'ime bir başvuru tutmanın en kolay yolu nedir?

JBoss web hizmetleri, bir @Resource ek açıklamasını kullanarak servis sınıfınıza bir WebServiceContext eklemenize olanak tanır. Düz servletlerde çalışan benzer bir şey var mı? Bu problemi çözmek için bir web servisi bir somunu ezmek için bir balyoz kullanıyor olabilir.

cevap

31

Sizin servlet uygulama bağlamı almak için WebApplicationContextUtils kullanabilirsiniz, ancak daha sonra servlet kod Bahar Framework üzerinde doğrudan bağımlılık olacaktır.

Başka bir çözüm öznitelik olarak servlet bağlamına Bahar fasulye ihraç etmeye uygulama bağlamı yapılandırmak geçerli:

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

Orada

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

Güzel, teşekkürler. –

+0

Bu şekilde yapılmasının ve WebApplicationContextUtils kullanılmasının avantajı nedir? Her iki şekilde de Spring'e bağlı. – Elliot

+5

Servlet içeriği özniteliğini yerleştirme mekanizmasının Bahar kullanılarak uygulanması gerekmez. Başlangıçta çalışan bir filtre veya başka bir sunucu uygulaması, sunucu içeriği özniteliğini doldurabilir. –

7

Bunu yapmanın bir yolunu buldum:

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

kullanarak servlet bağlamdan fasulye alabilirsiniz Sizin servlet Bunu yapmak için çok daha karmaşık bir yoldur. Orada SpringBeanAutowiringSupport böyle bir şey inşa izin verdiğini org.springframework.web.context.support iç: Bu Bahar o ServletContext (örn ContextLoaderListener yoluyla oluşturulan) bağlı ApplicationContext arama ve ApplicationContext mevcut Bahar fasulye enjekte neden olur

public class MyServlet extends HttpServlet { 

    @Autowired 
    private MyService myService; 

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

.

+4

Yayında 2.5.x SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this) olmalıdır; geri kalanı otomatik olarak idare eder. Harika bahşiş btw. – Lajcik

+1

ServletConfig öğelerinden birine erişmeniz gerekiyorsa, "init" yönteminde "super.init (config)" aradığınızdan emin olun; örn. public void init (ServletConfig yapılandırması) { super.init (config); SpringBeanAutowiringSupport.processInjectionBasedOnServletContext (this, config.getServletContext()); } – tamsler

+0

İpucu için teşekkürler, iyi yakalama! –

İlgili konular