Access Spring beans from a servlet in JBoss

后端 未结 3 623
再見小時候
再見小時候 2020-11-30 23:21

I want to write a simple servlet in JBoss which will call a method on a Spring bean. The purpose is to allow a user to kick off an internal job by hitting a URL.

Wha

相关标签:
3条回答
  • 2020-11-30 23:41

    Your servlet can use WebApplicationContextUtils to get the application context, but then your servlet code will have a direct dependency on the Spring Framework.

    Another solution is configure the application context to export the Spring bean to the servlet context as an attribute:

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

    Your servlet can retrieve the bean from the servlet context using

    SpringifiedJobbie jobbie = (SpringifiedJobbie) getServletContext().getAttribute("jobbie");
    
    0 讨论(0)
  • 2020-11-30 23:47

    I've found one way to do it:

    WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
    SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");
    
    0 讨论(0)
  • 2020-11-30 23:57

    There is a much more sophisticated way to do that. There is SpringBeanAutowiringSupportinside org.springframework.web.context.support that allows you building something like this:

    public class MyServlet extends HttpServlet {
    
      @Autowired
      private MyService myService;
    
      public void init(ServletConfig config) {
        super.init(config);
        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
          config.getServletContext());
      }
    }
    

    This will cause Spring to lookup the ApplicationContext tied to that ServletContext (e.g. created via ContextLoaderListener) and inject the Spring beans available in that ApplicationContext.

    0 讨论(0)
提交回复
热议问题