Scopes
Each Petite bean has its scope. Within the bean scope there is one and only one instance associated with the bean name. Scopes are defined during the registration and container then maintains instances within the scopes. When bean is lookuped by its name, Petite will return instance that is unique for bean's scope.
Petite supports several scopes. It is possible and easy to create new, custom ones.
Two most common and used scopes are: ProtoScope
and SingletonScope
. The SingletonScope
is the default scope, used when no scope is specified explicitly. Beans of this scope are unique for the whole Petite container and will be instantiated by container only once. On the other hand, beans of ProtoScope
are instantiated every time when lookuped.
Scope is defined during bean registration:
or, alternatively:
Now, each time when foo
is retrieved from the container, a new instance of Foo
class will be created. And each time Petite will inject the same instance of Boo
class, since scope of boo
bean is (implicitly set as) SingletonScope
.
Available scopes
Here is the list of available Petite scopes:
ProtoScope
- beans are created each time requested.SingletonScope
- beans are singletons for the container.SessionScope
- beans are singletons in current HTTP session. To have this feature, theRequestContextListener
must be used.ThreadLocalScope
- beans are unique in the current thread.
Using session scope
In order to use SessionScope
(in a servlet container), the following listeners has to be added to the web.xml
:
Using session scope outside of container
When container has session scope beans, it can't be used out of servlet container. This makes testing outside of container hard. However, Petite has one nice feature: it is possible to register scopes manually. In regular use case, it is not necessary to deal with scopes registration, since scopes will be resolved and instantiated on their first usage. Anyhow, it is possible to register specific scope instance for any scope that will be used instead of required one.
For example, it is possible to replace session scope with the singleton scope, what is usually enough for the tests:
Now all session scope beans will be registered within singleton scope, assuming there is one and only one, big session.
Last updated