Программно создать объект в Spring? - PullRequest
1 голос
/ 18 июня 2010

Есть ли в Spring способ получить объект программно, как если бы он был введен XML-файлом.

Вот что я имею в виду

У меня есть этот класс с именем securityDelegate.Его экземпляры всегда создаются весной

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

. Мне нужно использовать экземпляр этого класса в SessionListener, и, как я понимаю, поскольку это на уровне сервлета, я не могу внедрить экземплярsecurityDelegate в мою HttpSessionListener реализацию.

То, что я хотел бы сделать, - это получить экземпляр через Java-код, внутри моей реализации, чтобы сделать что-то подобноеНапомним, это было возможно в прошлый раз, когда я использовал весну (3+ года назад), но я мог быть смущен.Может быть, создать завод?

Ответы [ 3 ]

3 голосов
/ 18 июня 2010
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(se.getServletContext.());
ctx.getBean("securityDelegate");
2 голосов
/ 18 июня 2010

Для полноты:

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();
 }
}
0 голосов
/ 19 июня 2010

Да, используйте фабрику. Просто намного сложнее. Гении DI / IoC.

...