代码之家  ›  专栏  ›  技术社区  ›  Tom

在Spring中以编程方式创建对象?

  •  1
  • Tom  · 技术社区  · 15 年前

    在Spring中,是否有一种方法可以像XML文件注入的那样以编程方式获取对象?

    这就是我的意思

    我有一个叫做SecurityDelegate的类。它的实例总是由Spring创建的

    <bean id="securityDelegate" class="securityBusinessDelegate" lazy-init="true">
        <property name="securityServiceEJB" ref="securityServiceEJB"/>
        <property name="securityService" ref="securityService"/>
      </bean>
    

    我需要在sessionListener中使用这个类的一个实例,据我所知,由于这是一个servlet级别,所以我不能将securityDelegate的实例注入到 HttpSessionListener 实施。

    我想做的是通过Java代码在我的实现中检索一个实例来执行这样的操作。

    public class SessionListener implements HttpSessionListener {
    
     //other methods
     @Override
     public void sessionDestroyed(HttpSessionEvent se) {
        //get an instance of securityBusinessDelegate here
    
        securityBusinessDelegate.doSomething();
     }
    }
    

    我似乎记得我上次使用Spring(3年多前)时,这是可能的,但我可能会感到困惑。也许要建个工厂?

    3 回复  |  直到 6 年前
        1
  •  3
  •   ballmw    15 年前
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(se.getServletContext.());
    ctx.getBean("securityDelegate");
    
        2
  •  2
  •   Andrew Wynham    10 年前

    完整性:

    import org.springframework.context.ApplicationContext;    
    import org.springframework.web.context.support.WebApplicationContextUtils;
    
    public class SessionListener implements HttpSessionListener {
    
     @Override
     public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext servletCtx = se.getSession().getServletContext();
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletCtx);
        YourClass securityBusinessDelegate = ctx.getBean(YourClass.class);
    
        securityBusinessDelegate.doSomething();
     }
    }
    
        3
  •  -1
  •   irreputable    15 年前

    是的,使用工厂。只是更复杂的一个。DI/IOC天才。