0

我正在尝试使用范围在我的 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-proxy,但其行为类似于原型范围,它是每个类中的不同实例,并且它不通过请求保存任何信息......

任何想法我做错了什么?

编辑:

我用 servlet 2.5 和 web.xml 配置尝试了同样的场景,它的工作就像地狱一样;)

4

1 回答 1

0

the behavior is right. the instance only lives the one request. see this site for further information.

try to inject the spring-component with the @Autowired annotation

于 2013-04-25T07:54:04.053 回答