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

时间:2010-06-18 17:05:14

标签: java spring dependency-injection factory

在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();
 }
}

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

3 个答案:

答案 0 :(得分:3)

    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(se.getServletContext.());
ctx.getBean("securityDelegate");

答案 1 :(得分:2)

为了完整性:

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();
 }
}

答案 2 :(得分:-1)

是的,请使用工厂。只是一个复杂得多的人。 DI / IoC Geniuses。