user241178
user241178

Reputation: 271

What does it mean in Spring 3, web-aware application context

I am trying to setup a session scoped bean but the spring document said that session scope is only applicable on web-aware application context. No further explanation in the doc. Can someone clarify this?

Upvotes: 7

Views: 9503

Answers (5)

Vamsi Jayavarapu
Vamsi Jayavarapu

Reputation: 401

In Spring, a "web-aware" application means an application that can handle web requests and responses. Spring provides two standard bean scopes (“singleton” and “prototype”) that can be used in any Spring application, plus three additional bean scopes (“request”, “session”, and “globalSession”) for use only in web-aware applications.

Upvotes: 0

Gunther
Gunther

Reputation: 1328

ApplicationContext is an interface, spring ships multiple ApplicationContext implementations, according to documentation you need to use one that is web-aware.

The request, session, application, and websocket scopes are available only if you use a web-aware Spring ApplicationContext implementation (such as XmlWebApplicationContext). If you use these scopes with regular Spring IoC containers, such as the ClassPathXmlApplicationContext, an IllegalStateException that complains about an unknown bean scope is thrown.

And as of spring framework core (6.0.4) further configuration might be required:

To support the scoping of beans at the request, session, application, and websocket levels (web-scoped beans), some minor initial configuration is required before you define your beans.

...

If you access scoped beans within Spring Web MVC, in effect, within a request that is processed by the Spring DispatcherServlet, no special setup is necessary. DispatcherServlet already exposes all relevant state.

If you use a Servlet web container, with requests processed outside of Spring’s DispatcherServlet (for example, when using JSF), you need to register the org.springframework.web.context.request.RequestContextListener ServletRequestListener. This can be done programmatically by using the WebApplicationInitializer interface. Alternatively, add the following declaration to your web application’s web.xml file:

<web-app>
    ...
    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>
    ...
</web-app>

Spring boot will automatically configure this for you (couldn't find documentation mentioning this explicitly).

Upvotes: 1

mahfuj asif
mahfuj asif

Reputation: 1979

Web aware means when the application provides web endpoints for third party client. I.E When the application contains at least one RestController . You can do this by simply adding @RestController annotation to your class.

Upvotes: 1

SivaRaju Penuboina
SivaRaju Penuboina

Reputation: 21

There are basically 5 types of scopes available for spring bean. 1)Singleton 2)Prototype 3)Request 4)Session 5)Global-Session

The first two scopes can be used with any type of spring applications. But the remaining 3 are related to web applications. They can be used only with the spring applications which are involved in web.

Upvotes: 2

Chris Thompson
Chris Thompson

Reputation: 35598

This means that you can only use the session scoped beans in a an application deployed to a web server. Spring can be used in applications that run in standard JVMs along with applications that run in servlet containers (Tomcat, etc). Session, however, only exists in web servers so it has no meaning if the application is running in a standard desktop environment.

Upvotes: 11

Related Questions