我想在我的servlet 3.0應用程序中使用範圍內的請求。Spring @Scope(「請求」)不適用於Servlet 3.0
我沒有使用web.xml,而是使用了WebApplicationInitializer的實現。該onStartup方法是這樣的:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext applicationContext =
new AnnotationConfigWebApplicationContext();
applicationContext.setServletContext(servletContext);
applicationContext.scan("package containing proxy scoped bean and other stuff");
applicationContext.refresh();
servletContext.addListener(new ContextLoaderListener(applicationContext));
servletContext.addListener(new RequestContextListener());
}
和請求範圍的bean是這樣的:
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class CallerInformation {
private String clientIp;
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
}
現在注入的「CallerInformation」不是CGLIB的代理,但行爲像原型作用域,它是在每個類中的不同實例,它不通過請求保存任何信息...
任何想法我做錯了什麼?
編輯:
我已經試過相同的情況下使用Servlet 2.5和web.xml配置,它拼命地工作;)
我不知道你的意思。 – woezelmann 2013-04-25 08:58:32
你用Servlet 3.0和web.xml試過了嗎?嘗試它也... – 2013-04-25 11:56:53
也嘗試改變順序爲'servletContext.addListener(new RequestContextListener()); servletContext.addListener(new ContextLoaderListener(applicationContext));'Listerner命令也可以做一些問題。不是100%確定這是因爲這裏.. ' – 2013-04-25 12:07:49