在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年前)这是可能的,但我可能会感到困惑。也许建立工厂?
答案 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。