请求scoped bean没有创建

时间:2017-04-11 12:29:21

标签: java spring

我不知道自己错过了什么,检查了所有关于请求范围的bean创建的链接,但是我遗漏了为什么请求范围的bean没有创建的原因。

这是请求范围的bean类:

package com.spring.beans;

public class RequestScopedBean 
{
    public RequestScopedBean()
    {
        System.out.println("RequestScopedBean constructor");
    }   
    @Autowired
    HttpServletRequest request;

    public void getSessionId()
    {
        if(request != null)
        {
            System.out.println(request.getSession().getId());
        }
    }
}

Web.xml中

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>
    <listener>
        <listener-class>com.spring.systemaudit.OESLog4jListener</listener-class>
    </listener>
    <listener>
     <listener-class>se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventor</listener-class>
    </listener>  
    <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    ...
</web-app>

和root-context.xml

...
<bean id="requestScopedBean" class="com.spring.beans.RequestScopedBean" scope="request">

</bean>
...

如果我创建scope="singleton"则创建bean,因为我在启动服务器时可以在控制台上看到sysout,那么为什么不使用scope="request"。我缺少什么?

1 个答案:

答案 0 :(得分:2)

我猜它已成功创建......但是根据要求。必须在调用使用bean的控制器时创建bean。例如。键入localhost:8080/someRequestMapping时,控制器会被触发,如果Controller有对bean的引用,则会创建它。

默认情况下,引用是一个代理,它根据需要创建Request范围的bean。

启动时没有请求存在,因此未创建bean(仅创建代理)